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' |