序号

简述

Access语法

SqlServer语法

Oracle语法

解决方案

01

系统时间

Now(),Date()

GETDATE()

SYSDATE

GetSysTimeStr

02

连接字符串

&

+

||

GetConcatStr

03

截取字符串

Mid

SubString

SubString

GetSubStr

04

小写字符串

LCase

Lower

Lower

GetLowerStr

05

大写字符串

UCase

Upper

Upper

GetUpperStr

06

查找字符串

InStr

InStr

CharIndex

GetFindStr

07

替换空值

IIF+IsNull

Coalesce

Nvl

GetNullStr

08

条件取值

IIF, Switch

Case+When+Else

DeCode或Case

GetCaseStr

09

字段类型转换

CStr,CInt,CDate

Convert或cast

To_Char,To_Number.

GetConvertStr

10

日期字符串

#2004-10-19#

‘2004-10-9’

‘2004-10-9’

GetDateStr

11

最大值加1

GetNextNumStr

12

Like语句函数

Like ‘101*

Like ‘101%’

Like ‘101%’

GetLikeStr

 

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、DropIndex

SqlServer中:Drop Index<表名>.<索引名>

Access中: Drop Index<索引名> ON <表名>

、表添加标识列

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()   
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  <表名>;

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

SQL Server

SQL Server Definition

Yes/No

BIT

(Integer: 0 or 1)

Number (Byte)

TINYINT

(Positive Integer 0 -> 255)

Number (Integer)

SMALLINT

(Signed Integer -32,768 -> 32,767)

Number (Long Integer)

INT

(Signed Integer -(2^31) -> (2^31)-1)

(no equivalent)

BIGINT

(Signed Integer -(2^63) -> (2^63)-1)

Number (Single)

REAL

(Floating precision -1.79E + 308 -> 1.79E + 308)

Number (Double)

FLOAT

(Floating precision -3.40E + 38 -> 3.40E + 38)

Currency

MONEY

(4 decimal places, -(2^63)/10000 -> ((2^63)-1)/10000)

Currency

SMALLMONEY

(4 decimal places, -214,748.3648 -> 214,748.3647)

Hyperlink

(no equivalent - use VARCHAR())

Decimal

DECIMAL

(Fixed precision -10^38 + 1 -> 10^38 - 1)

Numeric

NUMERIC

(Fixed precision -10^38 + 1 -> 10^38 - 1)

Date/Time

DATETIME

(Date+Time 1753-01-01 -> 9999-12-31, accuracy of 3.33 ms)

Date/Time

SMALLDATETIME

(Date+Time 1900-01-01 -> 2079-06-06, accuracy of one minute)

Text(n)

CHAR(n)

(Fixed-length non-Unicode string to 8,000 characters)

Text(n)

NCHAR(n)

(Fixed-length Unicode string to 4,000 characters)

Text(n)

VARCHAR(n)

(Variable-length non-Unicode string to 8,000 characters)

Text(n)

NVARCHAR(n)

(Variable-length Unicode string to 4,000 characters)

Memo

TEXT

(Variable-length non-Unicode string to 2,147,483,647 characters)

Memo

NTEXT

(Variable-length Unicode string to 1,073,741,823 characters)

OLE Object

BINARY

(Fixed-length binary data up to 8,000 characters)

OLE Object

VARBINARY

(Variable-length binary data up to 8,000 characters)

OLE Object

IMAGE

(Variable-length binary data up to 2,147,483,647 characters)

AutonumberAutoincrement

IDENTITY

(any numeric data type, with IDENTITY property)

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

create table table1
(idautoincrement(1,1)
primary key)

create table AAA(RID Counter,url Memo,ActNameMemo,
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、条件取值Case+When+Else、IIF、Switch的使用

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

SqlServer: select
case

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

else 列名

end as 别名

from  表名;

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

select Switch( On=1,'On', On=0,'Off') fromtable

18、余数

Access:   a mod 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
个空格

StrComp比较两个字符串是否内容一致(不区分大小写) select
StrComp ("abc","ABC")

返回0, select
StrComp("abc","123")返回-1

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

Mid   
取得子字符串select
Mid ("123",1,2)

Choose根据第一参数,返回后面字符串组的值, select
后,返回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), '-','') –20110811223308

22、Access使用Chr()将ASCII码转为字符,而SQL中类似函数为Char()

Access: SELECT CHR(13) & CHR(10)

SQL Server: SELECT CHAR(13) + CHAR(10)

23、字符串处理函数

Access的字符串函数不光可以在查询数据库的语句内部使用,也可以在VBA中直接使用。

Access

SQL Server

TEXT Equivalent

CINT(), CLNG()

CAST()

CAST(SUBSTRING())

FORMAT()

CONVERT()

CONVERT(SUBSTRING())

INSTR()

CHARINDEX()

CHARINDEX(), PATINDEX()

ISDATE()

ISDATE()

ISDATE(SUBSTRING())

ISNULL()

ISNULL()

ISNULL()

ISNUMERIC()

ISNUMERIC()

ISNUMERIC(SUBSTRING())

LEFT()

LEFT()

SUBSTRING()

LEN()

LEN()

DATALENGTH()

LCASE()

LOWER()

LOWER(SUBSTRING())

LTRIM()

LTRIM()

LTRIM(SUBSTRING())

REPLACE()

REPLACE()

STUFF()

RIGHT()

RIGHT()

SUBSTRING()

RTRIM()

RTRIM()

RTRIM(SUBSTRING())

CSTR()

STR()

STR(SUBSTRING())

MID()

SUBSTRING()

SUBSTRING()

UCASE()

UPPER()

UPPER(SUBSTRING())

StrConv()

n/a

n/a

TRIM()

n/a

n/a

24、Access里列别名必须使用As进行标记,SQLServer则可要可不要;表的别名则都是可用可不用。

25、Access的NOT IN速度慢

在通过VBA的JET引擎调用Access语法时,NOT IN速度非常慢,上千行的数据可能就需要好几分钟。替代方法是:

SELECT t1.id FROM t1 LEFT JOIN t2 ON t1.id = t2.id WHEREt2.id IS NULL

26、Currency与Money

Currency类型的好处是可以使用Format函数去添加货币符号和合适的小数点、千分位位置。但在SQLServer内部做不到这一点,需要先将结果取出然后使用外部函数去实现。

27、Yes/No与BIT

对比布尔类型的列,Access中可以使用True/False来比较或赋值,但SQL中最好直接使用整数。

--Access:

[...]WHERE ynColumn = FALSE

[...]WHERE ynColumn = 0

-- SQLServer:

[...]WHERE ynColumn = 0

Access与SQL Server 语法差异的更多相关文章

  1. MySQL基本语法(一):和SQL Server语法的差异小归纳

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  2. C#操作access和SQL server数据库代码实例

    在C#的学习中,操作数据库是比较常用的技术,而access和sql server 数据库的操作却有着不同.那么,有哪些不同呢? 首先,需要引用不同的类.因为有着不同的数据引擎. access:usin ...

  3. Top 10 steps to optimize data access in SQL Server

    2009年04月28日 Top 10 steps to optimize data access in SQL Server: Part I (use indexing) 2009年06月01日 To ...

  4. 在access转sql server指定的转换无效

    今天继续昨天没解决的问题,还是继续报错数据库中“指定的转换无效”,看着这个错误都有点头大了,啊啊啊啊,因为无法再代码中寻找到具体点,只好在晚上继续查询 最后终于看到一条帖子说在转换的时候可能出现数据冲 ...

  5. SQL SERVER 语法汇总

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...

  6. SQL Server 语法大全

    SQL语句参考,包含Access.MySQL 以及 SQL Server 基础 创建数据库 CREATE DATABASE database-name 删除数据库 drop database dbna ...

  7. SQL Server语法入门

    1.说明:增加.删除一个列 Alter table tablename add columnName col type alter table tablename drop columnName co ...

  8. C#连接Access与SQL Server

    1.连接Access数据库 string strConnection = "Provider=Microsoft.Ace.OleDb.12.0; Data Source=" + S ...

  9. 万能数据库连接类-Oracle、DB2 、Access 、Sql Server

    package cc.apps.report;   import java.sql.Connection; import java.sql.DriverManager; import java.sql ...

随机推荐

  1. REST-framework快速构建API--认证

    一.API使用流程 使用过API的同学都知道,我们不可能任意调用人家的API,因为通过API可以获取很多关键数据,而且这个API可能供多个部门或个人使用,所以必须是经过授权的用户才能调用. API的使 ...

  2. Css_button样式对不齐

    发现了是按钮的vertical-align式样,统一显示的设置为middle,搞定.

  3. MOSFET中的重要参数

    最近在调试MOSFET电路中,发现了更多问题,比如同样的PI反馈控制电路可以很好的控制PMOS工作,却对NMOS不能很好控制.当然你肯定会说那是因为PMOS和NMOS不同呀,这自然没有错,我在上一篇文 ...

  4. 【LeetCode】数组--合并区间(56)

    写在前面   老粉丝可能知道现阶段的LeetCode刷题将按照某一个特定的专题进行,之前的[贪心算法]已经结束,虽然只有三个题却包含了简单,中等,困难这三个维度,今天介绍的是第二个专题[数组] 数组( ...

  5. django反向解析URL和URL命名空间

    django反向解析URL和URL命名空间 首先明确几个概念: 1.在html页面上的内容特别是向用户展示的url地址,比如常见的超链接,图片链接等,最好能动态生成,而不要固定. 2.一个django ...

  6. Python与rrdtool的结合模块

    rrdtool(round robin database)工具为环状数据库的存储格式,round robin是一种处理定量数据以及当前元素指针的技术.rrdtool主要用来跟踪对象的变化情况,生成这些 ...

  7. PAT甲题题解-1120. Friend Numbers (20)-水题

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789775.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  8. C++ 多态Polymorphism 介绍+动态绑定、静态绑定

    什么是多态? 多态(polymorphism)一词最初来源于希腊语polumorphos,含义是一种物质的多种形态. 在专业术语中,多态是一种运行时绑定机制(run-time binding) ,通过 ...

  9. 《Linux内核分析》第四周笔记 扒开系统调用的三层皮(上)

    扒开系统调用的三层皮(上) 一.用户态.内核态和中断 库函数将系统调用封装起来. 1.什么是用户态和内核态 一般现代CPU都有几种不同的指令执行级别. 在高执行级别下,代码可以执行特权指令,访问任意的 ...

  10. wordpress学习三:wordpress自带的模板学习

    在<学习二>里,大概说了下怎么去查找模板,本节我们以一个简单的模板为例子,继续说说wordpress的模板机制,看看做一个自己的模板需要哪些知识点. 页面模板渲染 wordpress的模板 ...