DB Oracle与Access在开发中的不同之处
1. 函数名称的 不同 功能 Oracle Access 字符函数: 返回字符的 ASCII 码 ASCII(x) ASC(x) 返回 ASCII 为 X 的字符 CHR(x) CHR(x) 式化字符串 To_Char( x, format ) Format(x, format) 转换字母大小写 LOWER(x)UPPER(x) LCASE(x)UCASE(x) 求字符串长度 LENGT
1.函数名称的不同
功能 |
Oracle |
Access |
字符函数: |
|
|
返回字符的ASCII码 |
ASCII(x) |
ASC(x) |
返回ASCII为X的字符 |
CHR(x) |
CHR(x) |
格式化字符串 |
To_Char( x, format ) |
Format(x, format) |
转换字母大小写 |
LOWER(x) UPPER(x) |
LCASE(x) UCASE(x) |
求字符串长度 |
LENGTH(x) |
LEN(x) |
去除字符串中的空格 |
LTRIM(x[, trim_string]), RTRIM(x[,trim_string]) TRIM([trim_string From ]x) |
LTRIM(x) RTRIM(x) TRIM(x) |
取子字符串 |
SUBSTR(x, start[,length]) |
LEFT(x, length) MID(x,start,length) RIGHT(x,length) |
转换函数: |
|
|
如果X与search相等,返回result,否则,返回default |
Decode(x, search,result,default) |
IIF(x=search, result, default) |
将数字转换为字符串 |
To_Char(x) |
CStr(x) |
将字符串转换为数字 |
To_Number(x) |
CDbl() --转换为dbouble |
如果ColName为空,返回result,否则,返回ColName的值。 |
NVL(ColName, result) |
IIF(IsNull(ColName), result, ColName) |
日期函数: |
|
|
当前系统时间(日期小时分秒) |
sysdate |
NOW() |
当前日期 |
Trunc(sysdate) |
DATE() |
当前时间 |
-- |
TIME() |
返回时间的某个部分 |
To_Char( sysdate, ‘yyyy’ ) To_Char( sysdate, ‘mm’ ) To_Char( sysdate, ‘dd’ ) To_Char( sysdate, ‘hh’ ) To_Char( sysdate, ‘mi’ ) To_Char( sysdate, ‘ss’ ) Extract( Year From Sysdate ) Extract( Month From Sysdate) Extract( Day From Sysdate) Extract( Hour From TimeStamp '2007-09-27 0:0:0') Extract( Minute From TimeStamp '2007-09--27 23:59:59') |
Year(now()) Month(now()) Day(now()) Hour(now()) Minute(now()) Second(now()) DatePart(format, now()) |
将字符串转换为日期 |
To_Date( x, format ) |
CDate(x ) #date_string# |
2.SQL语句实现的差别
1、Oracle支持连续的Left Join,但是Access不支持。
Access实现Oracle的连续两个Left Join的方法:
Select * From TblA Left Join
(Select * From TblB Left Join TblC )
2、Access给字段起别名是必须用AS,但是Oracle不用AS也可以,建议起别名全部都用AS
3、Oracle可以使用 Select Count( Distinct ColumnName ) From…..的语法,但是Access中不可以。Access中要实现这样的功能,要使用嵌套查询:
Select Count(*) From
( Select Distinct ColumnName From Tbl….)
4、Oracle中,如果TblA Left Join TblB,那么结果集是TblA中数据的数量。但是在Access中,TblA Left Join TblB,结果集的数量是TblA* TblB的数量。
5、在Oracle中,用一条SQL向一个递增的字段插入数据可以使用如下SQL:
Insert Into TblA ( N_ID ) Values ( ( Select ( Nvl( Max(N_ID), 0 )+1 ) from TblA ) );
但是由于函数的不同,在Access中需要使用下面的SQL:
Insert Into TblA( N_ID ) Values ( IIF( IsNull(DLookUp( ‘Max(N_ID)+1’, ‘TblA’, ‘’ ) ), 1, DLookUp( ‘Max(N_ID)+1’, ‘TblA’, ‘’ ) ) );
DLookUp是Access的一个内置的函数,使用方法为:
DLookup("字段名称" , "表或查询名称" , "条件")
返回的结果为:从根据“条件”,从“表或查询名称”中查出“字段名称”的值。
3.使用Delphi时遇到的一些问题的解决办法
1、不正常地定义参数对象。提供了不一致或不完整的信息
这个错误经常出现在操作Access数据库的日期字段时发生。原因为,Delphi默认将:X认为是一个参数,而Access中的时间可以表示为#2007-01-01 10:11:12#,这样,Delphi在解析这个字符串时会出问题。
解决方法有两个:
1 在给TADOQuery对象的SQL属性赋值前,先调用qry.ParamCheck := True;然后再执行后续操作。在操作完成后,执行qry.ParamCheck := False,恢复默认设置。
2 SQL语句中,将日期类型的字段全部作为参数来操作,例如:
sSql := ‘Insert Into TblA ( D_Date ) values (:D_Date)’;
qry.SQL.Text := sSql;
qry.ParamByName(‘D_Date’).Value := DateValue;
2、类似于“不可更新的查询”的错误。
Access数据库是只读的,更改使其为可写即可。
推荐阅读
-
DB Oracle与Access在开发中的不同之处
-
Python中time模块与datetime模块在使用中的不同之处
-
Python中time模块与datetime模块在使用中的不同之处
-
在程序开发中,++i 与 i++的区别
-
iOS开发中,block与代理的对比,双方的优缺点及在什么样的环境下,优先使用哪一种更为合适?
-
在开发中C++与C的混用的方法
-
个人见解-在实际应用中Oracle的EXISTS与IN的使用及效率-遇到的问题与想法记录
-
JSP servlet与ssh等框架相比,在互联网网站开发和企业级开发中的优劣势分析?
-
DateDiff函数在Sql与Access中的区别【转】
-
PHP函数eregi()在实际应用中与ereg()的不同之处