Oracle → GoldenDB SQL 转换详细参考

UID: 7646587759582856199

Oracle → GoldenDB SQL 转换详细参考

1. 日期时间函数

当前日期时间

Oracle GoldenDB/MySQL
sysdate NOW()CURRENT_TIMESTAMP
systimestamp NOW(3)CURRENT_TIMESTAMP(3)

日期格式化

Oracle GoldenDB/MySQL
to_char(date_col, 'yyyy-MM-dd') DATE_FORMAT(date_col, '%Y-%m-%d')
to_char(date_col, 'yyyy-MM-dd hh24:mi:ss') DATE_FORMAT(date_col, '%Y-%m-%d %H:%i:%s')
to_char(date_col, 'yyyymm') DATE_FORMAT(date_col, '%Y%m')
to_char(date_col, 'yyyymmdd') DATE_FORMAT(date_col, '%Y%m%d')
to_char(date_col, 'day') DATE_FORMAT(date_col, '%W')

字符串转日期

Oracle GoldenDB/MySQL
to_date('2024-01-01', 'yyyy-MM-dd') STR_TO_DATE('2024-01-01', '%Y-%m-%d')
to_date('2024-01-01 10:30:00', 'yyyy-MM-dd hh24:mi:ss') STR_TO_DATE('2024-01-01 10:30:00', '%Y-%m-%d %H:%i:%s')

日期运算

Oracle GoldenDB/MySQL
sysdate + 1 DATE_ADD(NOW(), INTERVAL 1 DAY)
sysdate - 7 DATE_SUB(NOW(), INTERVAL 7 DAY)
sysdate + 1/24 DATE_ADD(NOW(), INTERVAL 1 HOUR)

日期截断

Oracle GoldenDB/MySQL
trunc(date_col) DATE(date_col)
trunc(date_col, 'MM') DATE_FORMAT(date_col, '%Y-%m-01')
trunc(date_col, 'YYYY') DATE_FORMAT(date_col, '%Y-01-01')

2. 字符串函数

Oracle GoldenDB/MySQL
`str1 \ \
substr(str, pos, len) SUBSTRING(str, pos, len)
instr(str, substr) INSTR(str, substr)LOCATE(substr, str)
length(str) CHAR_LENGTH(str)LENGTH(str)
replace(str, old, new) REPLACE(str, old, new)
upper(str) UPPER(str)
lower(str) LOWER(str)
trim(str) TRIM(str)
lpad(str, len, pad) LPAD(str, len, pad)
rpad(str, len, pad) RPAD(str, len, pad)

3. 空值处理

Oracle GoldenDB/MySQL
nvl(expr, default) IFNULL(expr, default)
nvl2(expr, val1, val2) IF(expr IS NOT NULL, val1, val2)
coalesce(expr1, expr2, ...) COALESCE(expr1, expr2, ...)

4. 条件表达式

Oracle GoldenDB/MySQL
decode(col, 'A', 1, 'B', 2, 0) CASE WHEN col = 'A' THEN 1 WHEN col = 'B' THEN 2 ELSE 0 END
case when ... then ... end CASE WHEN ... THEN ... END(语法相同)

5. 分页查询

Oracle GoldenDB/MySQL
WHERE rownum < 10 LIMIT 9
WHERE rownum <= 10 LIMIT 10
子查询 WHERE rownum = 1 LIMIT 1

6. 序列/自增

Oracle GoldenDB/MySQL
sequence_name.nextval 使用 AUTO_INCREMENT 列,INSERT 时不传值
sequence_name.currval LAST_INSERT_ID()
func_sc_getseq('table_name') 移除此函数调用,依赖 AUTO_INCREMENT

7. 特殊查询

Oracle GoldenDB/MySQL
SELECT 1 FROM dual SELECT 1
SELECT sysdate FROM dual SELECT NOW()

8. 数值函数

Oracle GoldenDB/MySQL
round(num, decimals) ROUND(num, decimals)
ceil(num) CEIL(num)CEILING(num)
floor(num) FLOOR(num)
mod(a, b) MOD(a, b)a % b
trunc(num, decimals) TRUNCATE(num, decimals)

9. 聚合函数

Oracle GoldenDB/MySQL
count(*) COUNT(*)(相同)
sum(col) SUM(col)(相同)
avg(col) AVG(col)(相同)
max(col) MAX(col)(相同)
min(col) MIN(col)(相同)
listagg(col, ',') within group(order by ...) GROUP_CONCAT(col ORDER BY ... SEPARATOR ',')

10. 数据类型转换

Oracle 类型 GoldenDB/MySQL 类型 说明
NUMBER BIGINT 整数
NUMBER(10,2) DECIMAL(10,2) 精确小数
VARCHAR2(255) VARCHAR(255) 变长字符串
CHAR(10) CHAR(10) 定长字符串
CLOB LONGTEXT 大文本
BLOB LONGBLOB 二进制大对象
DATE DATETIME 日期时间
TIMESTAMP TIMESTAMP 时间戳
LONG LONGTEXT 长文本(已废弃)

11. DDL 语法差异

Oracle GoldenDB/MySQL
CREATE SEQUENCE seq_name 使用 AUTO_INCREMENT 属性
ALTER TABLE ... ADD CONSTRAINT ... 语法基本相同
CREATE INDEX idx_name ON t(col) 语法基本相同
COMMENT ON TABLE t IS 'xxx' ALTER TABLE t COMMENT = 'xxx'
COMMENT ON COLUMN t.col IS 'xxx' ALTER TABLE t MODIFY COLUMN col COMMENT 'xxx'
1 个赞