Access和sql server的语法区别 (包括db2 oracle)
- 格式:doc
- 大小:286.00 KB
- 文档页数:10
Access与sql server 语法差异Access SqlServer系统时间Date() getdate()见10点连接字符串& +截取字符串MidSubString 见20点小写字符串LCase Lower 见12点大写字符串UCase Upper 见12点条件取值IIF Case+When+Else 见17点字段类型转换CStr,CInt,CDate Convert或cast 见21点日期字符串#2011-08-10# '2011-08-10' 见4点1、select,update语句区别select,update对于单表操作时基本一致。
但多表操作时Access与SqlServer中的update语句会有差别:SqlServer中更新多表的update语句:update Table1 set = from Table1 a, Table2 b where a.ID = b.ID;Access中同样功能的sql语句:update Table1 a, Table2 b set = where a.ID = b.ID;比较得出:Access中的update语句没有from子句,所有引用的表都列在update关键字后2、delete语句SqlServer中:deletefrom<表名>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后的字段当作一个数据库字段参与计算。
oracle和sqlserver查询语句Oracle和SQL Server是两种常见的关系型数据库管理系统(DBMS),它们在查询语句方面有一些不同之处。
在本文中,我们将一步一步回答关于Oracle和SQL Server查询语句的问题,以帮助您更好地理解它们的区别。
首先,让我们从基本的查询语句开始。
无论是Oracle还是SQL Server,都使用SELECT语句来检索数据。
下面是一个简单的示例查询,从一个名为"employees"的表中选择所有员工的姓名:SELECT name FROM employees;在这个查询中,"name"是要检索的列名,而"employees"是表的名称。
这个查询语句将返回一个包含所有员工姓名的结果集。
在Oracle中,还可以使用表别名来简化查询。
表别名是一个用于替代表名称的临时名称。
例如,我们可以使用表别名"e"来编写上面的查询:SELECT FROM employees e;在SQL Server中,也可以使用表别名。
与Oracle类似,我们可以使用“AS”关键字或直接省略关键字来定义表别名。
下面是一个相同的查询示例:SELECT FROM employees AS e;或SELECT FROM employees e;接下来,让我们来看看在Oracle和SQL Server中如何使用WHERE子句来添加条件筛选。
在Oracle中,WHERE子句用于过滤满足指定条件的行。
以下是一个示例查询,从"employees"表中选择所有薪水大于5000的员工的姓名:SELECT name FROM employees WHERE salary > 5000;在这个查询中,"salary > 5000"是条件表达式,用于指定返回薪水大于5000的员工。
浅析使用Access 2000与SQL Server 2000的区别
罗兴荣
【期刊名称】《电脑知识与技术》
【年(卷),期】2007(000)017
【摘要】在软件开发过程中,少不了要使用数据库.Access 2000与SQL Server 2000是目前用得比较多的.由于Access 2000使用简单方便,但安全性差,而SQL Server 2000安全可靠,所以在使用数据库开发或升级软件时必须注意到他们存在的区别.
【总页数】2页(P1355-1356)
【作者】罗兴荣
【作者单位】湖北恩施职业技术学院;计算机与信息工程系,湖北,恩施,445000【正文语种】中文
【中图分类】TP311
【相关文献】
1.Access 2000与SQL Server 2000数据库的连接技术 [J], 杨云海
2.浅析使用Access 2000与SQL Server 2000的区别 [J], 罗兴荣
3.浅析SQL Server2000中游标的使用 [J], 朱倩
中如何连接Sql Server2000和Access2000数据库 [J], 贺军;李喜梅;章毅;吴世富;谌顺周
5.浅析使用Access 2000与SQL Server 2000的区别 [J], 罗兴荣
因版权原因,仅展示原文概要,查看原文内容请购买。
论Oracle数据库与access数据库的应用区别摘要:数据库技术是各类系统与应用平台开发中不可或缺的支持,因为有了数据库技术作为支持,各类的应用平台与软件才能实现更好的交互、实现更多的功能。
目前数据库的种类比较多,每一种都有各自的优势,也都在一定的领域内得到了应用,本文中主要对两种数据库Oracle与Access的应用进行了初步的区分分析。
关键词:Oracle;Access;数据库;区分数据库(Database)是按照数据结构对数据进行存储、管理的平台,各类软件对于各类数据信息的查询、添加、删除等都离不开数据库的支持。
数据库的发展已经经历了60余年,在信息技术日新月异发展的今天,随着大数据时代的到来,数据库所承担的任务不在仅仅的局限在数据的存储、管理方面,更多的时候它扮演的是为用户提供所需的各类数据和为用户数据管理服务的角色[1]。
数据库的类型有很多种,有简单类型的数据存储的小型数据库、有海量信息存取的大型数据库等等。
具体如甲骨文公司的Oracle、微软的SQL Server、mysql、DB2、Access等。
在本文中,主要对Oracle与Access这两种数据库的应用进行了初步的区分分析。
1.Access数据库及其应用Access是由微软开发与设计的关系数据库管理系统属于微软office应用软件中的重要一员,其MicrosoftJet Database Engine 与windows系统平台的图形用户界面结合起来。
对于软件开发人员,基于Access数据库开发应用软件是比较容易的。
而Access也和office其他办公软件一样均支持VB宏语言,在Access数据库中还可以借用VBA的代码模块直接调用Windows,实现更为直接、更为快速的系统调用,提高具体应用平台的运行效率。
Access数据库能够和window系统的IIS服务器实现无缝的对接,结合asp语言,能够让开发者快速、高效的构建起各类的应用平台,虽然性能上存在一些缺陷,但是应用在一些中、小型的项目上还是没有太大问题的[2]。
Access、SQL Server、Oracle的区别在做公司一个产品中,需要有Access、SQL Server、Oracle三个版本;编写SQL语句的过程中,尽量使用一些通用的语句,但还是有些方面有些区别避免不了,现简单总结一下。
以下A代表Access,S代表SQL Server,O代表Oracle1、取当前系统时间A:Select Now()S:Select Getdate()O:Select Sysdate From Dual2、连接字符串A:&S:+O:||3、字符串函数(截取字符串、大写、小写、查找字符串位置)A:Mid、UCase、LCase、InStrS:SubString、Upper、Lower、CharIndexO:SubStr、Upper、Lower、InStr4、判断取值语句A:IIFS:Case When ThenO:Decode5、时间字段A:要用#号分隔,或者转换为日期SELECT * FROM Books WHERE RegDate = #2007-5-1# 或SELECT * FROM Books WHERE RegDate = CDate(’2007-5-1′)S:可以直接用''SELECT * FROM Books WHERE RegDate = ‘2007-5-1′O:To_DateSELECT * FROM Books WHERERegDate=To_Date('2007-05-01','yyyy-mm-dd')6、数据类型转换A:CStr,CInt,CDateS:ConvertO:To_Char,To_Number,To_Date7、Inser Into …..Select …From 语句Insert Into a(ii,jj,kk) (Select ii,jj,kk From b)这样的语句,在SQL Server以及Oracle中都不会有错,但在Access中会报:INSERT INTO 语句的语法错误。
SQLServerMySqlOracle语法对⽐及区别操作SQLServer Oracle Mysql查看表结构exec sp_help 表名desc 表名在command window看desc 表名或 describe 表名或show columns from 表名;修改数据库名称exec sp_renamedb ‘旧数据库名’,’新数据库名’不详修改表名exec sp_rename ‘旧表明’,’新表明’rename 旧表名 to 新表名alter table 表名 rename to 新表名修改列名exec sp_rename ‘表.旧列名’,’新列名’alter table 表名 rename column 旧列名 to 新列名alter table test change column address address1 varchar(30)--修改表列名删除数据库drop database 数据库名不详Drop database添加表中⼀列alter table 表名 Add 列名数据库类型alter table 表明 add(列名数据类型) 或alter table 表名 Add 列名数据库类型alter table test add column name varchar(10); --添加表列删除表中⼀列alter table 表名 drop column 列名alter table 表名 drop column 列名alter table test drop column name;修改表现有列alter table 表名 alter column 列名新数据库类型⼤⼩alter table 表明 modify(列名数据类型)alter table test modify address char(10) --修改表列类型||alter table test change address address char(40)删除约束alter table 表名 drop constraint约束名完全⼀样添加主键约束alter table 表名add constraint 主键约束名primary key (列名)完全⼀样alter table 表明add primary key (列名)删除主键约束alter table 表名 drop primary key添加唯⼀约束alter table 表名add constraint 唯⼀约束名unique (列名)完全⼀样alter table 表名 add unique (列名)添加默认约束alter table 表名add constraint default (值) for 列名完全⼀样添加检查约束alter table 表名add constraint check (列名 > 10)完全⼀样添加外键约束alter table ⼦表add constraint 外键约束名foreign key(⼦表的列名) references 主表 (列名)on update cascade / on updateaction注意:默认和加 on update action 表⽰更新受限加on update cascade 表⽰更新不受限,多项操作时⽤逗号隔开完全⼀样添加索引约束alter table 表名 add index 索引名 (列名)添加普通索引:create index 索引名 ON 表名 (列名)添加唯⼀索引:create unique索引名 ON 表名 (列名)删除索引drop index 索引名 on 表名alter table 表名 drop index 索引名⾝份: exec sp_grantlog域名\密码’⾝份: exec sp_addlogin ‘登陆’,’密码’SET PASSWORD FOR'username'@'host'= PASSWORD('newpassword');数据库名⾝份: Exec域名密码’,’数据库⽤户名’⾝份: Exec sp_grantdbaccess登陆帐户’,’数据库⽤户名’create user HDEAM_TYMBidentified by ""default tablespace HDEAM_TYMBtemporary tablespace TEMPprofile DEFAULT;mysql>insert intoer(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) values("localhost","pppadmin",password("passwd"),'','','');CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY'123456';CREATE USER 'pig'@'%' IDENTIFIED BY '123456';CREATE USER 'pig'@'%' IDENTIFIED BY '';CREATE USER 'pig'@'%';权限 [on 表明] to 数据库grant dba to HDEAM_TYMB with admin option;-- Grant/Revoke system privilegesgrant unlimited tablespace to HDEAM_TYMBwith admin option;“abc”;grant all privileges on phplampDB.* to phplamp@localhostidentified by '1234';mysql>flush privileges;权限 [on 表名] from 数据REVOKE SELECT ON*.* FROM'pig'@'%';数据库’drop user HDEAM_SBFF cascade;mysql>Delete FROM user Where User="phplamp" andHost="localhost";mysql>flush privileges;⾝份: exec sp_droplogin⾝份: exec sp_revokelogin 登分离数据库:数据库名附加数据库:数据库名,主数据⽂件路径’,⽇志⽂件路径’exp hdeam_product/d3B68Apk29v34Dj@orclfile=E:/tymb.dmp log=E:/tymb.logimp HDEAM_LHSH/HDEAM_LHSH@orcldevfile=E:\TYMBHDEAM_BAK_2013-03-25.dmpfull=Y;mysqldump -h localhost -u root -pmysql oa >d:\oa.sqlmysql -h localhost -u root -p jira<d:\jira.sql:Select *select * from表)Exec Sp_helpExecExec数据库名exec表名exec sp_helpindex注意: 下⾯都是通过( select * from 对象 ) 来查看信息触发器 user_triggers过程 user_procedures查看源代码 user_source查看数据库对象 user_objects查看错误信息 show errors查看索引信息 user_indexes查看分区索引 user_ind_partitions查看有关基于列创建的索引 user_ind_columns查看表空间 -- user_tablespaces查看所有数据库 show databases;查看库所有表 show tables;查看表结构和属性use information_schema;select * from columns where table_name=’表名’查看表源代码show create table 表名;查看存储过程源代show create procedure 过程名查看视图源代码show create procedure 过程名查看视图资代码show create VIEW 视图名查看表的索引show index from 表名查看表的索引show keys from 表明表储蓄过/空过程,函数,视图,表的源代码:对象名::查看序列 -- user_sequences查看同义词 -- user_ind_columns查看⽤户表信息 -- user_tables查看⽤户所有的表信息 user_all_tables查看表的索引show keys from 表明sysdate NOW()varchar2(20)不⼀定要指定具体列名必须指定具体列名标识的开始值, 标识种右)create sequence 序列名1.序列名.nextval 获取下⼀个序列的值2.序列名.currval 获取当前的序列的值: *.mdf =1 :*.ndf >=0 : *.log >=1数据⽂件: *.dbf >=1⽇志⽂件: *.log >=11位置开始查找t字符串(默认从1开始)从pos位置len获取字符串的长度把字符串全部转换成把字符串全部转换成清除左边的空格清楚右边的空格从左边返回指定长度的从右边返回指定长度将s t替换成字符串我的⾳乐我’)A我的⾳乐我的世界EFG2位置开3的字符串,并在该位置索引从1开始substr(char, pos, len) 截取字符串length(char) 返回字符串的长度lower(char) 转换为⼩写upper(char) 转换为⼤写trim() 截取左右空格initcap(char) ⾸字母⼤写ltrim(char,set) 左剪裁rtrim(char,set) 右剪裁replace(char oldchar, newchar) 字符串替换concat(char1, char2) 连接字符串cha(67) 根据ASCII码返回对应的字符lpad()和rpad() 在字符串的左边或右边添加东西需要3个参数第⼀个是字符串第⼆个是返回值的总长度, 第三个是⽤来填充的字符值 as varchar) 不需指定长度to_char(d|n, fmt)将数字或⽇期转换为指定格式的值 as varchar) 不需指定长度值) 必须指to_char(d|n, fmt)将数字或⽇期转换为指定格式的字符串to_date(char,frm)将char 或varchar 转换为⽇期数据类型to_number() 将包含数字的字符转换为number数据类型取绝对值取上界最⼩整取下界最⼤整数取幂四舍五⼊,正数返回1 ,负数返-1求平⽅根获取计算机名称nvl(ex1,ex2)如果ex1为null则返回ex2;如果ex1不为null则返回ex1;nvl2(ex1,ex2,ex3)如果ex1不为null则返回ex2如果ex1为null则返回ex3nullif(ex1,ex2)如果ex1=ex2则返回null 否则返回ex1;聚合)列名) 求这列的平均值列名) 求这列的最⼩值列名) 求这列的最⼤值统计所有的⾏包括重复列名) 统计指定列中⾮空值列名) 统计不是重复右句⽤于将信息表划分,按组进⾏聚合运算avg(列名) 求这列的平均值min(列名) 求这列的最⼩值max(列名) 求这列的最⼤值count(*) 统计所有的⾏包括重复值和空值count(列名) 统计指定列中⾮空值的个数count(distinct 列名) 统计不是重复值的个数group by右句⽤于将信息表划分为组,按组进⾏聚合运算返回当前系统时间返回指+指定部分后的⽇期返回返回指a. add_months(d,n) 返回给指定的⽇期加上指定的⽉数后的⽇期值 selectadd_months(sysdate,2) from dual;b. months_between(d,d) 返回2个⽇期之间的⽉数select months_between (date '2005-05-06',date '2005-9-01') from dual;c. last_day(d) 返回指定⽇期当⽉的最后⼀天的⽇期select last_day(sysdate) from dual;d. round(d, [fmt]) 返回⽇期值⽇期四舍五⼊为格式模型指定的单位 select round(date'2005-09-08','year') from dual; 返回 2005-01-01 selectround(date'2005-09-08','month') from dual; 返回2005-09-01 select round(date'2005-09-08','day')from dual; 返回最靠近的⼀个星期⽇e. next_day(d, day) 返回指定的下⼀个星期⼏的⽇期 select next_day(sysdate,'星期⼆') fromdualf.trunc 语法与round 相同区别:trunc 是只舍不⼊g.extract 提取⽇期时间类型中的特定部分|| 连接字符串⽤于将2个或多个字符串合并成⼀个字符串两个)重复的⾏select orderno from order_master union select orderno from order_detail;b.union all 合并2个查询选定的所有⾏包括重复的⾏c.intersect 返回2个查询都有的⾏d.minus 第1个查询在第2个查询中不存在的数据)个,⾄n-个条)::对1 :)左别名.列名,右别名.列from 左表 as 左别名 inner右表 as 右别名on 左别名.列= 右别名.列名左表名.列名,右表名.列from 左表 ,右表 where 左表.列名 = 右表名.列名左外连接:(返回左表的所有⾏,如null代替,存在则显⽰具体数,显⽰出来的总⾏数由左表决定)左别名.列名,右别名.列名左表 as 左别名 left join 右as 右别名on 左别名.列名 = 右.列名右外连接:(返回右表的所有⾏,如null代替,存在则显⽰具体数,显⽰出来的总⾏数由右表决定)左别名.列名,右别名.列名左表 as 左别名 right join右表 as 右别名on 左别名.列名 =完全⼀样连接分类:1内连接:条件2外连接1)左外连接: left join 或 left outer join2)右外连接:right join 或 right outer join3)完整外连接: Full join 或 Full outer join3交叉连接: from …4. 交叉连接:(返回左右表的所有⾏,如果左表没有与右表匹配的⾏则全部⽤null代替,如果右表没有与左表匹配的⾏则全部⽤null代替,存在则显⽰具体数据,显⽰出来的总⾏数=左表和右表⾏数和决定)Select 左别名.列名,右别名.列名 from 左表 as左别名 right join 右表 as 右别名on 左别名.列名= 右别名.列名完全拷贝: insert into ⽬标表源表部分拷贝: insert into ⽬标表 (列) select 列名 from 源表表不存完全拷贝: select * into 新表源表部分拷贝: select 列名 into 新from 源表拷贝表结构: select * into 新表源表 Where 1=2emp;b.拷贝⼀部分create table temp as select 列1,列2 from 表c.只拷贝⼀个空表(根据⼀个假条件)create table temp as select * from 表 where 1=2d.使⽤列别名: select stu_id, stu_name as "学⽣姓名" from student;A表,B1:⽬标表 set 列 = a.列 froma where a.关联列 = ⽬标表.2:列 = a.列 from 源a , ⽬标表b where a.关联列 =关联列3:⽬标表 set 列 = a.列 froma , ⽬标表b where a.关联列关联列4:⽬标表 set ⽬标表.列 = a.from 源表 a , ⽬标表 b where关联列 = b.关联列5:⽬标表 set⽬标表.列 = a.from 源表 a where a.关联列 =update ⽬标表a, 源表b set a.列 =b.列 where a.关联列 = b.关联列update ⽬标表a, 源表b set a.列 =b.列 where a.关联列 = b.关联列from 源表 a where a.关联列 = .关联列6:update语创建⼀个新表修改表中的列表名 alter column 列新数据库类型⼤⼩添加表中的列表名 Add 列名数据库删除表中的列表名 drop column 列删除表中的记录⽽不删除表的truncate table student只是查看表的结构删除表中的数据及表的结构a.创建⼀个新表create table student(stu_id int, stu_name varchar2(20)) tablespace lijiaob.修改表中的列alter table student modify(stu_name varchar2(40))c.添加表中的列alter table student add(stu_age int)d.删除表中的列alter table student drop column stu_agee.删除表中的记录⽽不删除表的结构truncate table studentf.只是查看表的结构desc studentg.删除表中的数据及表的结构drop table student;:.必须)a. commit 命令(⽤于提交并结束事务处理)commitb.savepoint 保存点类似于标记它将很长的事务处理划分为较⼩的部分他们⽤来标记事务中可以应⽤回滚的点save point savepoint_idc.rollbace work ,rollbackd.回滚到某个保存点rollback to savepoint伪列,但a.rowid(可以唯⼀的标识数据库中的⼀⾏)b.rownum (代表⾏的序号)rownum 不跟> , = , >= 操作使⽤储在,)变量名 = 值变量名 = 列名 from 表明列名 =⽤户)最后⼀个T-SQL错误号最后⼀次插⼊的标识本地服务器的名值’ 只出现在查询分析器中值’,16,1) 能在前台⽤条件) begin … end条件) begin …end else begin表名 where= 值)表名列名 = 值) begin …. enda) if condition then exp_bodyend if;b) if condition then exp_bodyelse exp_body end if;c) if condition then exp_bodyelsif condition then exp_bodyelse exp_body end if;1) loop condition end loop2) while condition Loop exp_body end loop3)for varable in [REVERSE] value1...value2 (varable 变量不需声明 , ... 是范围连接符 )loop exp_body end loop别名=case条件 then 值条件 then 值值表列名值 then 值值 then 值值表a) select case 列名when 值 then 值when 值 then 值else 值end case from 表明b) select casewhen 列名=值 then 值when 列名=值 then 值else 值end case from 表:1.列类型: %TYPEvarable tableName.columnName%TYPE;varable tableName.columnName%TYPE;2.⾏类型: %ROWTYPEvarable tableName%ROWTYPE;3.使⽤⾏类型:varable.列名;异常信息’,16,1) 能在 1)⾃定义异常:a)定义异常:(位 declare和 begin之间)DECLARE varable EXCEPTION;b)显⽰引发异常(为 begin 和 end 之间):RAISE varable;2)处理预定义异常:(位 begin 和 end 之间)EXCEPTIONwhen Too_Many_ROWS thenDBMS_OUTPUT.PUT_LINE('返回多⾏');when others thenDBMS_OUTPUT.PUT_LINE('全部处理');3) 引发应⽤程序错误:RAISE_APPLICATION_ERROR(error_number,error_message);原理: ):(重复⼦查询,不能单)(只执⾏⼀次,能单独执, 查询原理: 从外(外sql⼀次查出sql)到⾥把外不查出来的值传):查询到结果可以作为表来使⼀样切套⼦查询:Select * from AuthorBook a where CopyRight =(select Max(CopyRight) from AuthorBookwhere BookName = a.BopokName)(效率低)>连接查询(效), ⽽连. 右查询有连接查完全⼀样返回多⾏⼀列完全⼀样完全⼀样:只能出现在Group by分组,不能单独使⽤group by 就没有Having完全⼀样完全⼀样相对于mssql oracle显著的书写特点:1.代码⽚段必须放到begin end .. 中2.虚拟表 dual 的使⽤3.每⾏代码强制分号";"结束,包括end4.赋值符号 :=;(select xx into xx from daul;也可以⽤于赋值)5.省略了 as...补充:⼏种关系数据库中字符编码和存储长度需要注意的⼏个问题1.mysql中char(n) varchar(n) 中再utf8编码存储⽅式下数字表⽰的是字符数,但是在其他⽅式下就根据情况定,需要再相应环境下探索⼀下。
Access和Sql区别假设表game有⼀字段为gameYuiJian为bit字段(SQL SERVER 20005)和"是/否"字段(ACCSS数据库),在编写脚本⽂件时,如下才能正确执⾏ SQL strCmd = "Select Top 14 * From game Where gameTuiJian = 1 Order By Id Desc"; OleDb strCmd = "Select Top 14 * From game Where gameTuiJian = true Order By Id Desc"; 在时间的处理: sql server 语句"Select * From tt1 Where time1>'2009-12-01' " Access 语句" Select * From tt1 Where time1>#2009-12-01#"也可以⽤上⾯语句 Sql Server 语句"Select * From tt1 Where DateDiff(day,time1,getdate()) Access语句"Select * From tt1 Where DateDiff('d',time1,now) Access与SQL SERVER数据库转换 由于SQL2000⾥⾯没有"⾃动编号",所以你的以"⾃动编号"设置的字段都会变成⾮空的字段,这就必须⼿⼯修改这些字段,并把他的"标⽰"选择"是",种⼦为"1",增量为"1", 2,另外,ACCESS2000转换成SQL2000后,原来属性为"是/否"的字段将被转换成⾮空的"bit",这时候你必须修改成⾃⼰想要的属性了; ACCESS转SQL SERVER中的⼀些经验1.ACCESS的数据库中的⾃动编号类型在转化时,sql server并没有将它设为⾃动编号型,我们需在SQL创建语句中加上identity,表⽰⾃动编号!2.转化时,跟⽇期有关的字段,SQL SERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围⽐smalldatetime型⼤。
Access和sql server的语法区别(包括db2 oracle)Access和sql server的语法区别一、有区别的函数及解决方案以下所示的解决方案中的函数定义在untDataBase单元中TAdoConn类的方法中。
序号简述Access语法SqlServer语法Oracle语法DB2语法解决方案01 系统时间Date() GETDA TE() SYSDA TE GetSysTimeStr02 连接字符串& + || + GetConcatStr03 截取字符串SubString SubStr SubString SubString GetSubStr04 小写字符串LCase Lower Lower Lower GetLowerStr05 大写字符串UCase Upper Upper Upper GetUpperStr06 查找字符串InStr InStr CharIndex InStr GetFindStr07 替换空值IIF+IsNull Coalesce Nvl Coalesce GetNullStr08 条件取值IIF Case+When+Else DeCode或Case IIF GetCaseStr09 字段类型转换Str、var、…. Convert或cast To_Char,To_Number. GetConvertStr GetConvertStr10 日期字符串‘2004-10-9’#2004-10-19# ‘2004-10-9’ GetDateStr11 最大值加1GetNextNumStr12 Like语句函数Like ‘101* Like ‘101%’Like ‘101%’GetLikeStr13 表的连接要用( )报表连接起来自动识别表的连接14 交叉连接,分割表,用CROSS JOIN二、Access与SQLSERVER部分相同数据库函数及关键字列表1、函数序号简述01 记数函数Count02 最大值Max2、关键字序号简述01Like02 连接Join03 判断空Is Null三、Access与语句SqlServer的语句语法区别1、Inser Into …..Select …From 语句:在ACCESS中以下语句Insert INTOPubSubJectAccCopys(Copy_id,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment ,Acc_Pro,acc_type,Sub_id_flag,acc_index) (Select 200201,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub _id_flag,acc_index FROM PubSubJectAcc Where PubSubJectAcc.co_type='03')中后面"(select 200201******.co_Type='03')"中的小括号("(",")")必须去掉才能执行,如下:Insert INTOPubSubJectAccCopys(Copy_id,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment ,Acc_Pro,acc_type,Sub_id_flag,acc_index) Select 200201,Acc_id,Acc_Pid,Acc_name,acc_short,Acc_Comment,Acc_Pro,acc_type,Sub _id_flag,acc_index FROM PubSubJectAcc Where PubSubJectAcc.co_type='03'在SQL SERVER 中都可以2、Inner Join 语句1StrSql:='select er_id,er_opcode,b.copy_name from sysuser a inner join (syscopysuser c inner join syscopys b on c.copy_id=c.copy_id) on er_id=er_id whereer_opcode=''' +EdtUserOpCode.text+''' And copy_name='''+Tmpcopyname +'''';应该改为StrSql:='select er_id,er_opcode,b.copy_name from sysuser a inner join (syscopysuser c inner join syscopys b on c.copy_id=d.copy_id) on er_id=er_id whereer_opcode=''' +EdtUserOpCode.text+''' And copy_name='''+Tmpcopyname +'''';该行代码的检索条件错误:应该把 C.copy_id=C.Copy_id 改为c.copy_id=d.copy_id注:两种写法都能在SQL-SERVER中运行,但c.copy_id=C.copy_id在ACCESS 中不能运行3、Inner Join 语句2StrSql:='select copy_year,copy_name,a.copy_id from SysCopys a inner join SysCopysUser b on a.curcopy_flag=1 and a.copy_id=b.copy_id where er_id=' + '''' +TmpPubUserID+ '''';该为StrSql:='select copy_year,copy_name,a.copy_id from SysCopys a inner join SysCopysUser b on a.copy_id=b.copy_id where a.curcopy_flag=''1'' and er_id=' + '''' +TmpPubUserID+ '''';注:两种写法都能在SQL-SERVER中运行,但第一种在ACCESS中不能运行4、Inner Join语句3SQl server 中可以执行以下语句'Select distinct sysoption.opti_id,sysoption.opti_name,sysoption.opti_code,sysroleoption.opti_sort From sysoption inner join sysroleoption ON sysoption.opti_id=sysroleoption.opti_id AND sysroleoption.role_id=:roleid'但ACCESS中不能,只能'Select distinct sysoption.opti_id,sysoption.opti_name,sysoption.opti_code,sysroleoption.opti_sort From sysoption inner join sysroleoption ON sysoption.opti_id=sysroleoption.opti_id Where sysroleoption.role_id=:roleid'5、Update语句Sql SerV er 中能执行但Access 中不能'Update sysuserrole SET sysuserrole.role_sort = (Select sysrole.role_sort FROM sysrole Where sysuserrole.role_id = sysrole.role_id and er_id='01')'6、日期比较SQL SERVER 中用StrSql:='select copy_year,Start_month,Cur_month,Start_Flag,Start_date,End_date ' +'From SysCopys '+'where copy_id='''+LoginCopyID+''' '+'and start_date<='''+datetostr(LoginDate)+''' '+'and end_date>='''+datetostr(LoginDate)+'''';ACCESS中用StrSql:='select copy_year,Start_month,Cur_month,Start_Flag,Start_date,End_date ' +'From SysCopys '+'where copy_id='''+LoginCopyID+''' '+'and start_date<=#'+datetostr(LoginDate)+'# '+'and end_date>=#'+datetostr(LoginDate)+'#'参考以上的第10个函数“GetDateStr”7、最大数值获取语句StrSql:='insert into sysRoleOption '+'select '''+fidRoleId+''' as Role_ID,opti_id,'+'convert(numeric,opti_id)-(convert(numeric,opti_parentid)*100)+'+ MaxOptiSort +' as opti_Sort from sysoption where opti_parentid='''+PCoTypeID(self.trvRoles.Selected.data)^.StrCoTypeID+''' and opti_bottom=''1'+'''';改为StrSql:='insert into sysRoleOption '+'select '''+fidRoleId+''' as Role_ID,opti_id,'+'opti_id-opti_parentid*100+'+ MaxOptiSort+' as opti_sort from sysoption where opti_parentid='''+PCoTypeID(self.trvRoles.Selected.data)^.StrCoTypeID+''' and opti_bottom=''1'+''''注:两种写法都能在SQL-SERVER中运行,但第一种在ACCESS中不能运行但是考虑会出现Null值以及语句的通用性,可以使用以上的第07个函数“GetNullStr”和第09个函数“GetConvertStr”来完成字符串向数字,空值和0数字的转换:参考GetNextNumStr代码。