编号 | 类别 | ORACLE | MYSQL | 注释 |
1 | 数字函数 | round(1.23456,4) | round(1.23456,4) | 一样: ORACLE:select round(1.23456,4) value from dual MYSQL:select round(1.23456,4) value |
2 | abs(-1) | abs(-1) | 功能: 将当前数据取绝对值 用法: oracle和mysql用法一样 mysql: select abs(-1) value oracle: select abs(-1) value from dual |
|
3 | ceil(-1.001)) | ceiling(-1.001) | 功能: 返回不小于 X 的最小整数 用法: mysqls: select ceiling(-1.001) value oracle: select ceil(-1.001) value from dual |
|
4 | floor(-1.001) | floor(-1.001) | 功能: 返回不大于 X 的最大整数值 用法: mysql: select floor(-1.001) value oracle: select floor(-1.001) value from dual |
|
5 | Max(expr)/Min(expr) | Max(expr)/Min(expr) | 功能:返回 expr 的最小或最大值。MIN() 和 MAX() 可以接受一个字符串参数;在这 种情况下,它们将返回最小或最大的字符串传下。 用法: ROACLE: select max(user_int_key) from sd_usr; MYSQL: select max(user_int_key) from sd_usr; |
|
6 | 字符串函数 | ascii(str) | ascii(str) | 功能:返回字符串 str 最左边的那个字符的 ASCII 码值。如果 str 是一个空字符串, 那么返回值为 0。如果 str 是一个 NULL,返回值也是 NULL. 用法: mysql:select ascii('a') value oracle:select ascii('a') value from dual |
7 | CHAR(N,...) | CHAR(N,...) | 功能:CHAR() 以整数类型解释参数,返回这个整数所代表的 ASCII 码值给出的字符 组成的字符串。NULL 值将被忽略. 用法: mysql:select char(97) value oracle:select chr(97) value from dual |
|
8 | REPLACE(str,from_str,to_str) | REPLACE(str,from_str,to_str) | 功能: 在字符串 str 中所有出现的字符串 from_str 均被 to_str 替换,然后返回这个字符串. 用法: mysql: SELECT REPLACE('abcdef', 'bcd', 'ijklmn') value oracle: SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual |
|
9 | INSTR('sdsq','s',2) | INSTR('sdsq','s') | 参数个数不同 ORACLE: select INSTR('sdsq','s',2) value from dual(要求从位置2开始) MYSQL: select INSTR('sdsq','s') value(从默认的位置1开始) |
|
10 | SUBSTR('abcd',2,2) | substring('abcd',2,2) | 函数名称不同: ORACLE: select substr('abcd',2,2) value from dual MYSQL: select substring('abcd',2,2) value |
|
11 | instr(‘abcdefg’,’ab’) | locate(‘ab’,’abcdefg’) | 函数名称不同: instr -> locate(注意:locate的子串和总串的位置要互换) ORACLE: SELECT instr('abcdefg', 'ab') VALUE FROM DUAL MYSQL: SELECT locate('ab', 'abcdefg') VALUE |
|
12 | length(str) | char_length() | 函数名称不同: ORACEL: SELECT length('AAAASDF') VALUE FROM DUAL MYSQL: SELECT char_length('AAAASDF') VALUE |
|
13 | REPLACE('abcdef', 'bcd', 'ijklmn') | REPLACE('abcdef', 'bcd', 'ijklmn') | 一样: ORACLE: SELECT REPLACE('abcdef', 'bcd', 'ijklmn') value from dual MYSQL: SELECT REPLACE('abcdef', 'bcd', 'ijklmn') value |
|
14 | LPAD('abcd',14, '0') | LPAD('abcd',14, '0') | 一样: ORACLE: select LPAD('abcd',14, '0') value from dual MYSQL: select LPAD('abcd',14, '0') value from dual |
|
15 | UPPER(iv_user_id) | UPPER(iv_user_id) | 一样: ORACLE: select UPPER(user_id) from sd_usr; MYSQL: select UPPER(user_id) from sd_usr; |
|
16 | LOWER(iv_user_id) | LOWER(iv_user_id) | 一样: ORACLE: select LOWER(user_id) from sd_usr; MYSQL: select LOWER(user_id) from sd_usr; |
|
17 | 控制流函数 | nvl(u.email_address, 10) | IFNULL(u.email_address, 10) 或 ISNULL(u.email_address) |
函数名称不同(根据不同的作用进行选择): ORACLE: select u.email_address, nvl(u.email_address, 10) value from sd_usr u (如果u.email_address=NULl,就在DB中用10替换其值) MYSQL: select u.email_address, IFNULL(u.email_address, 10) value from sd_usr u(如果u.email_address=NULl,显示结果中是10,而不是在DB中用10替换其值) select u.email_address, ISNULL(u.email_address) value from sd_usr u(如果u.email_address是NULL, 就显示1<true>,否则就显示0<false>) |
18 | DECODE(iv_sr_status,g_sr_status_com, ld_sys_date, NULL) | 无,请用IF或CASE语句代替. IF语句格式:(expr1,expr2,expr3) |
说明: 1. decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THEN RETURN(翻译值2) ...... ELSIF 条件=值n THEN RETURN(翻译值n) ELSE RETURN(缺省值) END IF 2. mysql If语法说明 功能: 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在 语境而定。 用法: mysql: SELECT IF(1>2,2,3); |
|
19 | 类型转换函数 | TO_CHAR(SQLCODE) | date_format/ time_format | 函数名称不同 SQL> select to_char(sysdate,'yyyy-mm-dd') from dual; SQL> select to_char(sysdate,'hh24-mi-ss') from dual; mysql> select date_format(now(),'%Y-%m-%d'); mysql> select time_format(now(),'%H-%i-%S'); |
20 | to_date(str,format) | STR_TO_DATE(str,format) | 函数名称不同: ORACLE:SELECT to_date('2009-3-6','yyyy-mm-dd') VAULE FROM DUAL MYSQL: SELECT STR_TO_DATE('2004-03-01', '%Y-%m-%d') VAULE |
|
21 | trunc(-1.002) | cast(-1.002 as SIGNED) | 函数名称不同: TRUNC函数为指定元素而截去的日期值。 ORACLE: select trunc(-1.002) value from dual MYSQL:select cast(-1.002 as SIGNED) value MYSQL: 字符集转换 : CONVERT(xxx USING gb2312) 类型转换和SQL Server一样,就是类型参数有点点不同 : CAST(xxx AS 类型) , CONVERT(xxx,类型),类型必须用下列的类型: 可用的类型 二进制,同带binary前缀的效果 : BINARY 字符型,可带参数 : CHAR() 日期 : DATE 时间: TIME 日期时间型 : DATETIME 浮点数 : DECIMAL 整数 : SIGNED 无符号整数 : UNSIGNED |
|
22 | TO_NUMBER(str) | CAST("123" AS SIGNED INTEGER) | 函数名称不同 ORACLE:SELECT TO_NUMBER('123') AS VALUE FROM DUAL; MYSQL: SELECT CAST("123" AS SIGNED INTEGER) as value; SIGNED INTEGER:带符号的整形 |
|
23 | 日期函数 | SYSDATE | now() / SYSDATE() | 写法不同: ORACLE:select SYSDATE value from dual MYSQL:select now() value select sysdate() value |
24 | Next_day(sysdate,7) | 自定义一个函数:F_COMMON_NEXT_DAY(date,int) | 函数名称不同: ORACLE: SELECT Next_day(sysdate,7) value FROM DUAL MYSQL: SELECT F_COMMON_NEXT_DAY(SYSDATE(), 3) value from DUAL; (3:指星期的索引值)返回的指定的紧接着下一个星期的日期 |
|
25 | ADD_MONTHS(sysdate, 2) | DATE_ADD(sysdate(), interval 2 month) | 函数名称不同: ORACLE: SELECT ADD_MONTHS(sysdate, 2) as value from DUAL; MYSQL: SELECT DATE_ADD(sysdate(), interval 2 month) as value from DUAL; |
|
26 | 2个日期相减(D1-D2) | DATEDIFF(date1,date2) | 功能: 返回两个日期之间的天数。 用法: mysql: SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate oracle: 直接用两个日期相减(比如d1-d2=12.3) |
|
27 | SQL函数 | SQLCODE | MYSQL中没有对应的函数,但JAVA中SQLException。getErrorCode()函数可以获取错误号 | Oracle内置函数SQLCODE和SQLERRM是特别用在OTHERS处理器中,分别用来返回Oracle的错误代码和错误消息。 MYSQL: 可以从JAVA中得到错误代码,错误状态和错误消息 |
28 | SQLERRM | MYSQL中没有对应的函数,但JAVA中SQLException。getMessage()函数可以获取错误消息 | Oracle内置函数SQLCODE和SQLERRM是特别用在OTHERS处理器中,分别用来返回Oracle的错误代码和错误消息。 MYSQL: 可以从JAVA中得到错误代码,错误状态和错误消息 |
|
29 | SEQ_BK_DTL_OPT_INT_KEY.NEXTVAL | 自动增长列 | 在MYSQL中是自动增长列. 如下方法获取最新ID: START TRANSACTION; INSERT INTO user(username,password) VALUES (username,MD5(password)); SELECT LAST_INSERT_ID() INTO id; COMMIT; |
|
30 | SUM(enable_flag) | SUM(enable_flag) | 一样: ORCALE: SELECT SUM(enable_flag) FROM SD_USR; MYSQL: SELECT SUM(enable_flag) FROM SD_USR; |
|
31 | DBMS_OUTPUT.PUT_LINE(SQLCODE) | 在MYSQL中无相应的方法,其作用是在控制台中打印,用于测试,对迁移无影响。 | dbms_output.put_line每行只能显示255个字符,超过了就会报错 |
1、连接字符串在Oracle中用|| ,SqlServer中用+,MySQL中用concat('a','b','c')
Oracle中的decode在mysql中的等价实现
mysql支持if
格式:
IF(expr1,expr2,expr3)
如果expr1是TRUE(expr1<>;0且expr1<>;NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数字或字符串值
例如
SELECT IF(1<2, 'yes ', 'no ');
输出yes
同时,还支持case
SELECT CASE WHEN 1> 0 THEN "yes " ELSE "no " END;
还是输出yes
例一
//Oracle中 decode(Emergency,1,'紧急','普通')
//mysql
select a.title,if(a.Emergency=1,'紧急','普通')emergency from already_sign a
Select title,case Emergency when 1 then '紧急' else '普通' End as emergency from already_sign
例二
oracle的写法
SELECT decode(ttype,1,’a',2,’b',3,’c',’d') FROM taba
可以在mysql里写成
SELECT if(ttype=1, 'a',if(ttype=2,'b', if(ttype =3, 'c', 'd'))) FROM taba
同理
DECODE(hj_bz, 1, '总库入', 2, '总库出',3,'分库出',4,'已开票',5,'已安装',6,'已收款')
if(hj_bz=1,'总库入',if(hj_bz=2,'总库出',if(hj_bz=3,'分库出',if(hj_bz=4,'已开票',if(hj_bz=5,'已安装','已收款')))))
1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema.
DDL是SQL语言的四大功能之一。
用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束
DDL不需要commit.
CREATE
ALTER
DROP
TRUNCATE
COMMENT
RENAME
2.DML(Data Manipulation Language)数据操纵语言statements are used for managing data within schema objects.
由DBMS提供,用于让用户或程序员使用,实现对数据库中数据的操作。
DML分成交互型DML和嵌入型DML两类。
依据语言的级别,DML又可分成过程性DML和非过程性DML两种。
需要commit.
SELECT
INSERT
UPDATE
DELETE
MERGE
CALL
EXPLAIN PLAN
LOCK TABLE
3.DCL(Data Control Language)数据库控制语言 授权,角色控制等
GRANT 授权
REVOKE 取消授权
4.TCL(Transaction Control Language)事务控制语言
SAVEPOINT 设置保存点
ROLLBACK 回滚
SET TRANSACTION
SQL主要分成四部分:
(1)数据定义。(SQL DDL)用于定义SQL模式、基本表、视图和索引的创建和撤消操作。
(2)数据操纵。(SQL DML)数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。
(3)数据控制。包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。
(4)嵌入式SQL的使用规定。涉及到SQL语句嵌入在宿主语言程序中使用的规则。