Access与sql server 语法差异

Access与sql server 语法

1、 select,update语句区别select,update对于单表操作时基本一致。  但多表操作时AccessSqlServer中的update语句会有差别:SqlServer中更新多表的update语句:  

update Table1 seta.Name= b.Namefrom Table1 a, Table2 bwherea.ID= b.ID;Access中同样功能的sql语句:update Table1 a, Table2 bset a.Name= b.Namewhere a.ID= b.ID;比较得出:Access中的update语句没有from子句,所有引用的表都列在update关键字后

2、delete语句    SqlServer中:delete from <表名>where ID > 1;   Access中:delete*from <表名>where ID> 1;

3、as后面的计算字段区别 SqlServer中:

select sum(num)as sum_num,sum(num)*numas all_numfrom <表名>;   Access中:    

select sum(num)as sum_num, sum_num*num as all_num from <表名>;比较得出:SqlServer中:不可以把as后的字段当作一个数据库字段参与计算。 Access中: 可以把as后的字段当作一个数据库字段参与计算。 

     SQL Server as可以省略,Access不能

4时间字段、日期分隔符号   SqlServer中:单引号(’

select *from <表名>where RegDate='2011-08-10'    Access中:要用#号分隔,转换为日期

select * from <表名>where 生日=#2011-08-10#

select * from <表名>where 生日=2011-08-10

select * from <表名>where 生日=CDate(#2011-08-10#)

select * from <表名>where 生日=CDate(2011-08-10)

select * from <表名>where 生日=CDate('2011-08-10')5、Boolean所表示的常量   SqlServer中:整数:1(真)、0(假)   Access中:True、False;On、Off;Yes、No;整数:-1(真)、0(假)。6、字符串连接   SqlServer中:加号(+   Access中:和号(&)7、通配符   SqlServer中:    百分号(%)与零个或更多字符匹配。     下划线(_)与单个字符匹配。    上插入符(^)意味着不在列表中。    没有与英镑符(#)对应的字符。   Access中:  星号(*)与零个或更多字符匹配。          问号(?)与单个字符匹配。         叹号(!)意味着不在列表中。         英镑符(#)意味着单个数字。 8、DropIndex   SqlServer中:DropIndex <表名>.<索引名>   Access中:DropIndex <索引名> ON <表名>

9.表添加标识列  Access:altertable<表名>add列名 Counter(1,1);SqlServeraltertable<表名>add列名bigintidentity(1,1)notnull;

10.系统时间及常用时间函数

SqlServer:   selectgetdate()

Access:    select date()+time()   SelectNow()

SqlServer 中获取日期时间函数是convert(datetime,getdate(),0)     而在Access中为date()+time()或者 Now()

Access中,datediff ()dateadd ()函数表示时间类型的部分必须用单引号括起来

select datediff('n',addtime,now())from表名;

select dateadd('d',5,now());

而在SqlServer中,必须写成

select datediff(n,addtime,getdate())from表名;

select dateadd(d,5,getdate());

11. Access不支持between语句和Case+When+Else语句

12.字符串函数(截取字符串、大写、小写、查找字符串位置)

  Access:   MidUCaseLCaseInStr

        select Mid(列名,2,4)from<表名>;

       select UCase(列名)from <表名>;

        selectLCase(列名)from <表名>;

        selectInStr(列名, 'abc')from  <表名>;//查找字符串位置

  SqlServer: SubStringUpperLowerCharIndex

         selectsubstring(列名,2,4)from<表名>;

       select Upper(列名)from<表名>;

        selectLower(列名)from <表名>;

        selectCharIndex('abc',列名)from <表名>;//查找字符串位置

        selectCharIndex('abc',列名,2)from  <表名>;//查找字符串位置

13、Access中的逻辑值在库中为-1和0,而SQLServer中为1和0,所以写BoolField= 1这样的语句有兼容性问题,应该改为BoolField<> 0

14、Access的varchar(文本)型最大只有255,所以如果一个文本型字段大于255时,最好定义成备注型(Access中)或text型(SQLServer中);

15ACCESS所有类型为:

    Big Integer、Binary、Boolean、Byte、Char、Currency、Date/TimeDecimalDoubleFloat、GUID、Integer、Long、LongBinary(OLEObject)、Memo、Numeric、Single、TextTimeTimeStampVarBinary

常用的几种:

Date/Time 日期/时间

Boolean 是/

Decimal 小数

Memo 备注

Text 文本

Integer 整数

如果用自动编号且主键,如下:

create tabletable1(id autoincrement(1,1)primarykey)

create tableAAA(RID Counter,urlMemo,ActName Memo,ActDatetext(150), Up_Timetext(100))

连接字符串:conn = "Provider= Microsoft.Jet.OLEDB.4.0;Data Source = database.mdb";

16. 随机读取若干条记录

   SqlServer:selecttop 5*from <表名>order bynewid();

  Access:   selecttop 5*From<表名> ORDER BYRnd(id);

17.条件取值  IIF Case+When+Else的使用

   使用SQL语句用...代替过长的字符串显示

   SqlServer: selectcase

when len(列名)>10thenleft(列名,10)+'...'

else 列名

end as 别名

from  表名;

Access:  select IIF(len(列名)>2,left(列名,2)+'...',列名) from  表名;

18. 余数

   Access:   amod b

SqlServer: a% b

19. 判断字段值为空的区别

普通空:

Access和SqlServer一样  where code is nullwhere codeisnot null

条件空:

Access:iif(列名 isnull,0,列名) 或iif(列名 isnull,列名2, 列名)

SqlServer: isnull(列名,0)isnull(列名,列名2)

20.截取字符串

  Access:   select Mid(列名,2,4)from <表名>;

SqlServer: selectsubstring(列名,2,4)from <表名>;

 

 

21.字段类型转换及一些函数异同

  Access:

    CDate将字符串转化成为日期selectCDate(“2011/08/11”)

CStr 括号中的内容转换为字符串,括号中的内容可以是值、变量或表达式

select CStr(155值是"155"

CInt 将    selectCint("200"&"40") 值是"20040"

Format  格式化字符串,selectFormat(now(),'yyyy-mm-dd')返回类似于"2011-08-11" , selectFormat(3/9,"0.00")返回0.33

Space产生空格selectSpace(4)返回4个空格StrComp 比较两个字符串是否内容一致(不区分大小写) selectStrComp("abc","ABC")

返回0, selectStrComp("abc","123")返回-1

InStr  查询子串在字符串中的位置selectInstr("abc","a")返回1, selectInstr ("abc","f")返回0

Mid   取得子字符串selectMid("123",1,2)返回12

Choose根据第一参数,返回后面字符串组的值, selectChoose(1,"a","b","c")返回a,将1改成2后,返回b,改成3后,返回c(第一个参数也可以是某个字段)    IIF根据表达式返回特定的值selectIIF("3>1","OK","False"),返回OK

SqlServer:

 select cast('2011-08-11'asdatetime)

 select convert(varchar(10),getdate(),120)--2011-08-11

 select replace(convert(varchar(10),cast('2011-08-11'asdatetime),120), '-','')(PS:也可以下载文档进行阅读:点击打开链接

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网搬砖老肖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值