Access与sql server 语法
1、 select,update语句区别select,update对于单表操作时基本一致。 但多表操作时Access与SqlServer中的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);SqlServer:altertable<表名>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: Mid、UCase、LCase、InStr
select Mid(列名,2,4)from<表名>;
select UCase(列名)from <表名>;
selectLCase(列名)from <表名>;
selectInStr(列名, 'abc')from <表名>;//查找字符串位置
SqlServer: SubString、Upper、Lower、CharIndex
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中);
15.ACCESS所有类型为:
Big Integer、Binary、Boolean、Byte、Char、Currency、Date/Time、Decimal、Double、Float、GUID、Integer、Long、LongBinary(OLEObject)、Memo、Numeric、Single、Text、Time、TimeStamp、VarBinary。
常用的几种:
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 null 或where 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:也可以下载文档进行阅读:点击打开链接)