符 返回字符串中的起始INSTR 字符(从左) 将字符转换成小写 LOWER 将字符转换成大写 UPPER 在字符串的左边填充LPAD 字符 删除前导空格 LTRIM 删除尾空格 RTRIM 字符串中模式的起始INSTR 点 多次重复字符串 RPAD 字符串的语音表示 SOUNDEX 重复空格的字符串 RPAD 从数字数据转换而来TO_CHAR 的字符数据 子串 SUBSTR 字符替换 REPLACE 字符串中每个词的第INITCAP 一个字母大写 字符串转换 TRANSLATE 字符串长度 LENGTH 列表中的最大字符串 GREATEST 列表中的最小字符串 LEAST 如果为 NULL,则转换NVL 字符串 CHARINDEX LOWER UPPER 暂缺 LTRIM RTRIM PATINDEX REPLICATE SOUNDEX SPACE STR SUBSTRING STUFF 暂缺 暂缺 DATELENGTH 或 LEN 暂缺 暂缺 ISNULL 日期函数
下面是 Oracle 支持的日期函数及其 Microsoft SQL Server 对等函数。
函数 日期加 日期间的间隔 当前日期和时间 月的最后一天 时区转换 该日期后的第一个工NEXT_DAY 作日 Oracle (日期列 +/- 值)或 ADD_MONTHS (日期列 +/- 值)或 MONTHS_BETWEEN SYSDATE LAST_DAY NEW_TIME Microsoft SQL Server DATEADD DATEDIFF GETDATE() 暂缺 暂缺 暂缺 日期的字符串表示 TO_CHAR DATENAME 日期的整数表示 TO_NUMBER (TO_CHAR)) DATEPART 日期舍入 ROUND CONVERT 日期截尾 TRUNC CONVERT 字符串转换为日期 TO_DATE CONVERT 如果为 NULL,则转换NVL ISNULL 日期 转换函数
下面是 Oracle 支持的转换函数及其 Microsoft SQL Server 对等函数。
函数 数字到字符 字符到数字 日期到字符 字符到日期 十六进制到二进制 二进制到十六进制 Oracle TO_CHAR TO_NUMBER TO_CHAR TO_DATE HEX_TO_RAW RAW_TO_HEX Microsoft SQL Server CONVERT CONVERT CONVERT CONVERT CONVERT CONVERT 其它行级函数
下面是 Oracle 支持的其它行级函数及其 Microsoft SQL Server 对等函数。
函数 Oracle 返回第一个非空表达DECODE 式 当前序列值 CURRVAL 下一个序列值 NEXTVAL 如果表达式 1 = 表达DECODE 式 2,则返回空 用户的登录 ID 号 UID 用户的登录名 USER 用户的数据库 ID 号 UID 用户的数据库名 USER 当前用户 CURRENT_USER 用户环境(审核记录) USERENV CONNECT BY 子句的级LEVEL 别 Microsoft SQL Server COALESCE 暂缺 暂缺 NULLIF SUSER_ID SUSER_NAME USER_ID USER_NAME CURRENT_USER 暂缺 暂缺 合计函数
下面是 Oracle 支持的合计函数及其 Microsoft SQL Server 对等函数。
函数 平均值 计数 最大值 最小值 标准偏差 汇总 方差 Oracle AVG COUNT MAX MIN STDDEV SUM VARIANCE Microsoft SQL Server AVG COUNT MAX MIN STDEV 或 STDEVP SUM VAR 或 VARP 条件测试
Oracle DECODE 语句和 Microsoft SQL Server CASE 表达式都执行条件测试。当 test_value 中的值符合下列任何表达式时,就会返回相关的值。如果不符合,则返回 default_value。如果没有指定 default_value,且不符合任何表达式,则 DECODE 和 CASE 返回 NULL。下表给出了语法以及一个转换的 DECODE 命令的示例。
Oracle DECODE (test_value, expression1, value1 [[,expression2, value2] [U]] [,default_value] ) CREATE VIEW STUDENT_ADMIN.STUDENT_GPA (SSN, GPA) AS SELECT SSN, ROUND(AVG(DECODE(grade ,'A', 4 ,'A+', 4.3 ,'A-', 3.7 ,'B', 3 ,'B+', 3.3 ,'B-', 2.7 ,'C', 2 ,'C+', 2.3 ,'C-', 1.7 ,'D', 1 Microsoft SQL Server CASE input_expression WHEN when_expression THEN result_expression [[WHEN when_expression THEN result_expression] [...]] [ELSE else_result_expression] END CREATE VIEW STUDENT_ADMIN.STUDENT_GPA (SSN, GPA) AS SELECT SSN, ROUND(AVG(CASE grade WHEN 'A' THEN 4 WHEN 'A+' THEN 4.3 WHEN 'A-' THEN 3.7 WHEN 'B' THEN 3 WHEN 'B+' THEN 3.3 WHEN 'B-' THEN 2.7 WHEN 'C' THEN 2 WHEN 'C+' THEN 2.3 WHEN 'C-' THEN 1.7 WHEN 'D' THEN 1 ,'D+', 1.3 ,'D-', 0.7 ,0)),2) FROM STUDENT_ADMIN.GRADE GROUP BY SSN WHEN 'D+' THEN 1.3 WHEN 'D-' THEN 0.7 ELSE 0 END),2) FROM STUDENT_ADMIN.GRADE GROUP BY SSN CASE 表达式可以支持使用 SELECT 语句进行布尔测试,这是 DECODE 命令所不允许的。有关 CASE 表达式的详细信息,请参见 SQL Server Books Online。
将值转换为不同的数据类型
Microsoft SQL Server CONVERT 和 CAST 函数均是多用途的转换函数。它们提供了相似的功能,把一种数据类型的表达式转换为另一种数据类型,并支持多种特殊的数据格式:
? ?
CAST(expression AS data_type)
CONVERT (data type[(length)], expression [, style])
CAST 是一个 SQL-92 标准函数。这些函数执行与 Oracle TO_CHAR、TO_NUMBER、TO_DATE、HEXTORAW 和 RAWTOHEX 函数相同的操作。
数据类型是指该表达式要转换成为的任何系统数据类型。不能使用用户定义的数据类型。length 参数是可选的,它与 char、varchar、binary 和 varbinary 数据类型一起使用。可允许的最大长度是 8000。
转换 Oracle 字符到数字 TO_NUMBER('10') 数字到字符 TO_CHAR(10) Microsoft SQL Server CONVERT(numeric, '10') CONVERT(char, 10) CONVERT(datetime, TO_DATE('04-JUL-97') '04-JUL-97') TO_DATE('04-JUL-1997', CONVERT(datetime, 字符到日期 'dd-mon-yyyy') '04-JUL-1997') TO_DATE('July 4, 1997', CONVERT(datetime, 'July 4, 'Month dd, yyyy') 1997') TO_CHAR(sysdate) CONVERT(char, GETDATE()) TO_CHAR(sysdate, 'dd mon CONVERT(char, GETDATE(), 日期到字符 yyyy') 106) TO_CHAR(sysdate, CONVERT(char, GETDATE(), 'mm/dd/yyyy') 101) 十六进制到HEXTORAW('1F') CONVERT(binary, '1F') 二进制 二进制到十RAWTOHEX CONVERT(char, 六进制 (binary_column) binary_column) 注意,字符串是如何转换成日期的。在 Oracle 中,默认的日期格式模型为“DD-MON-YY”。如果使用任何其它格式,必须提供相应的日期格式模型。CONVERT 函数自动转换标准日期格式,而无须格式模型。
当把日期转换成字符串时,CONVERT 函数默认输出为“dd mon yyyy hh:mm:ss:mmm(24h)”。一种数字类型的编码用于设定到其它日期格式模型输出的格式。有关 CONVERT 函数的详细信息,请参见 SQL Server Books Online。
下表给出了 Microsoft SQL Server 日期的默认输出。
不带世纪 - 1 2 3 4 5 6 7 8 - 10 11 12 - 14 带有世纪 标准 0 或 100 (*) 默认 101 102 103 104 105 106 107 108 美国 ANSI 英国/法国 德国 意大利 - - - 9 或 109 (*) 默认毫秒 110 111 112 美国 日本 ISO 13 或 113 (*) 欧洲默认 114 - 输出 mon dd yyyy hh:miAM(或 PM) mm/dd/yy yy.mm.dd dd/mm/yy dd.mm.yy dd-mm-yy dd mon yy mon dd, yy hh:mm:ss mon dd yyyy hh:mi:ss:mmm(AM 或 PM) mm-dd-yy yy/mm/dd yymmdd dd mon yyyy hh:mm:ss:mmm(24h) hh:mi:ss:mmm(24h) 用户定义的函数
Oracle PL/SQL 函数可用于 Oracle SQL 语句中。在 Microsoft SQL Server 中,这一功能通常以其它方式实现。
在下面的示例中,Oracle 用户定义的函数 GET_SUM_MAJOR 用于获取按专业 (major) 交纳的学费总和。在 SQL Server 中,可通过把查询作为表使用,以替代这一函数。
Oracle SELECT SSN, FNAME, LNAME, ) TUITION_PAID, Microsoft SQL Server SELECT SSN, FNAME, LNAME, TUITION_PAID,