Access与sql server 语法
1、 select ,update 语句区别 select,update对于单表操作时基本一致。 但多表操作时 Access与 SqlServer中的 update 语句会有差别: SqlServer中更新多表的 update 语句:
update Table1 set a. Name = b. Name from Table1 a, Table2 b where a. ID = b. ID; Access中同样功能的sql 语句:update Table1 a, Table2 b set a. Name = b. Name where 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)* num as all_num from <表名>; 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、Drop Index SqlServer中: Drop Index < 表名>.< 索引名> Access中: Drop Index < 索引名> ON < 表名>
9. 表添加标识列 Access: alter table < 表名> add 列名 Counter( 1, 1); SqlServer: alter table < 表名> add 列名 bigint identity ( 1, 1) not null;
10. 系统时间及常用时间函数
SqlServer: select getdate ()
Access: select date ()+ time () Select Now()
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 <表名>;
select LCase ( 列名) from <表名>;
select InStr ( 列名 , 'abc' ) from <表名>;// 查找字符串位置
SqlServer: SubString 、Upper 、Lower 、CharIndex
select substring ( 列名, 2, 4) from <表名>;
select Upper ( 列名) from <表名>;
select Lower ( 列名) from <表名>;
select CharIndex ( 'abc' , 列名) from <表名>;// 查找字符串位置
select CharIndex ( 'abc' , 列名 ,2) from <表名>;// 查找字符串位置
13、Access中的逻辑值在库中为- 1和0, 而SQL Server 中为1和0, 所以写BoolField = 1这样的语句有兼容性问题,应该改为BoolField <> 0
14、Access的varchar (文本)型最大只有255,所以如果一个文本型字段大于255时,最好定义成备注型(Access中)或text 型(SQL Server 中);
15 . ACCESS所有类型为:
Big Integer、Binary 、Boolean、Byte、Char 、Currency、Date/ Time 、Decimal 、Double 、Float 、GUID、Integer、Long、Long Binary ( OLEObject) 、Memo、Numeric 、Single、Text 、Time 、TimeStamp 、VarBinary 。
常用的几种:
Date/ Time 日期/ 时间
Boolean 是/ 否
Decimal 小数
Memo 备注
Text 文本
Integer 整数
如果用自动编号且主键,如下:
create table table1 ( id autoincrement( 1, 1) primary key )
create table AAA( RID Counter, urlMemo, ActName Memo, ActDate text ( 150), Up_Time text ( 100))
连接字符串:conn = "Provider= Microsoft.Jet.OLEDB.4.0;Data Source = database.mdb" ;
16. 随机读取若干条记录
SqlServer: select top 5 * from <表名> order by newid ();
Access: select top 5 * From <表名> ORDER BY Rnd( id);
17.条件取值 IIF Case + When + Else 的使用
使用SQL语句用... 代替过长的字符串显示
SqlServer: select case
when len ( 列名)> 10 then left( 列名, 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 code is not null
条件空:
Access:iif( 列名 is null, 0, 列名) 或iif( 列名 is null, 列名2, 列名)
SqlServer : isnull ( 列名, 0) 或isnull ( 列名, 列名2)
20.截取字符串
Access: select Mid ( 列名, 2, 4) from <表名>;
SqlServer: select substring ( 列名, 2, 4) from <表名>;
21.字段类型转换及一些函数异同
Access:
CDate 将字符串转化成为日期 select CDate(“ 2011/08/11 ”)
CStr 将 括号中的内容转换为字符串,括号中的内容可以是值、变量或表达式
select CStr( 155) 值是"155"
CInt 将 select Cint("200"&"40") 值是"20040"
Format 格式化字符串, select Format (now(),'yyyy-mm-dd') 返回类似于"2011-08-11" , select Format (3/9,"0.00") 返回0.33
Space 产生空格 select Space (4) 返回4 个空格StrComp 比较两个字符串是否内容一致(不区分大小写) select StrComp ("abc","ABC")
返回0, select StrComp ("abc","123") 返回-1
InStr 查询子串在字符串中的位置 select Instr ("abc","a") 返回1, select Instr ("abc","f") 返回0
Mid 取得子字符串 select Mid ("123",1,2) 返回12
Choose 根据第一参数,返回后面字符串组的值, select Choose (1,"a","b","c") 返回a, 将1改成2后,返回b,改成3后,返回c(第一个参数也可以是某个字段) IIF 根据表达式返回特定的值 select IIF ("3>1","OK","False") ,返回OK
SqlServer:
select cast ( '2011-08-11' as datetime )
select convert ( varchar ( 10), getdate (), 120) --2011-08-11
select replace ( convert ( varchar ( 10), cast ( '2011-08-11' as datetime ),120), '-' , '' ) (PS:也可以下载文档进行阅读:http://download.csdn.net/download/xiaorungen/9996524)