从Oracle迁移到SQLServer的陷阱
时间:2007-12-23 来源:不详 作者:迈克DB
列的选择
用PLSQL执行数据查询的时候,FROM子句是必须的,这同SQLServer的要求是一样的。SELECT语句必须选择针对的数据表。在Oracle数据库内有一种非凡的表DUAL。DUAL表由Oracle连同数据字典一同创建,所有的用户都可以用名称DUAL访问该表。这个表里只有一列DUMMY,该列定义为VARCHAR2(1)类型,有一行值X。
从DUAL表选择数据常被用来通过SELECT语句计算常数表达式,由于DUAL只有一行数据,所以常数只返回一次。
Oracle下的DUAL查询如下所示:
SELECT‘x’FROMdual
而对等的SQLServer查询则是下面这个样子:
SELECT‘x’
连接
Oracle用||符号作为连接符,而SQLServer的连接符是加号: 。
Oracle查询如下所示: 织梦好,好织梦
Select‘Name’||‘LastName’FromtableName
对应的SQLServer查询如下所示:
Select‘Name’ ‘LastName’
数字取舍
Oracle数据库内有一个TRUNC函数,该函数返回m位十进制数的n位;假如省略m则n就是0位。m的值可以为负,表示截去小数点左边m位数字。
在SQLServer下可以用Round或者Floor。
以下是Oracle查询:
SELECTTRUNC(15.79,1)"Truncate"FROMDUAL;
下面是同类查询的SQLServer版本:
SELECTROUND(15.79,0)rounded,ROUND(15.79,0,1)truncated
SELECTFLOOR(ROUND(15.79,0)),FLOOR(ROUND(15.79,0,1))
数字转换
Oracle的TO_CHAR函数可以把n位NUMBER数据类型转换为VARCHAR2数据类型,同时采用可选的数字格式。
SQLServer则通过STR函数返回数字转换之后的字符数据。不过,该函数不具方便的Format参数。
Oracle查询如下:
SELECTto_char(123.45,99999999999999)fromtab
SELECTto_char(EXPIRY_DATE,’DDMONYYYY’)fromtab
以下是SQLServer版本的查询:
SELECTSTR(123.45,14)
本文来自织梦
SELECTSTR(round(123.455,2),12,2)
SELECTCAST(REPLACE((CONVERT(varchar(12),EXPIRYDATE,106)),’’,’’)asvarchar(9))
LENGTH和LEN
以下是Oracle的查询:
SELECTLENGTH(’SQLMAG’)"Lengthincharacters"FROMDUAL;
以上查询在SQLServer下是这样写的:
SELECTLEN(’SQLMAG’)"Lengthincharacters"
日期
以上两种系统都具有各自的当前日期和时间格式。
Oracle取得日期和采用如下方式:
SYSDATE
SQLServer则是这样的:
GETDATE()
你可以用各种语法操作日期。以下的代码对Oracle日期值中的月份进行了格式调整(返回日期再加上n月):
Selectadd_months(sysdate,12)fromdual
SQLServer则是如下完成同等功能的:
Selectdateadd(mm,12,getdate())
数据的减法也不同。以下代码在Oracle中直接对数据进行减法操作:
SELECTsysdate-add_months(sysdate,12)FROMdual
SQLServer则是这样做的:
SELECTdatediff(dd,GetDate(),dateadd(mm,12,getdate()))
上一篇:找出存放用户名和密码的表 下一篇:Perl操作My SQL数据库
文章评论
共有位Admini5网友发表了评论 查看完整内容