CREATE SEQUENCE table_id_seq START WITH 1 INCREMENT BY 1;
CREATE TABLE example (
id INT NOT NULL DEFAULT nextval('table_id_seq'),
name VARCHAR(100),
PRIMARY KEY (id)
);
OceanBase (AUTO_INCREMENT)
sql复制代码
CREATE TABLE example (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100),
PRIMARY KEY (id)
) AUTO_INCREMENT = 1;
SQLServer (IDENTITY)
sql复制代码
CREATE TABLE example (
id INT IDENTITY(1,1) NOT NULL,
name VARCHAR(100),
PRIMARY KEY (id)
);
达梦 (DM8)
sql复制代码
-- 方式1:IDENTITY 兼容SQLServer
CREATE TABLE example (
id INT IDENTITY(1,1) NOT NULL,
name VARCHAR(100),
PRIMARY KEY (id)
);
-- 方式2:序列
CREATE SEQUENCE table_id_seq START WITH 1 INCREMENT BY 1;
CREATE TABLE example (
id INT NOT NULL DEFAULT table_id_seq.NEXTVAL,
name VARCHAR(100),
PRIMARY KEY (id)
);
人大金仓 (KingbaseES)
sql复制代码
-- 同PostgreSQL,序列/IDENTITY 双支持
CREATE TABLE example (
id INT GENERATED AS IDENTITY,
name VARCHAR(100),
PRIMARY KEY (id)
);
-- 序列方式
CREATE SEQUENCE table_id_seq START WITH 1 INCREMENT BY 1;
CREATE TABLE example (
id INT NOT NULL DEFAULT nextval('table_id_seq'),
name VARCHAR(100),
PRIMARY KEY (id)
);
MySQL (AUTO_INCREMENT)
sql复制代码
CREATE TABLE example (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100),
PRIMARY KEY (id)
) AUTO_INCREMENT = 1;
SELECT * FROM table
ORDER BY id
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
达梦 (DM8)
sql复制代码
-- 兼容Oracle/PG/SQLServer
SELECT * FROM table WHERE ROWNUM <=10;
-- 标准分页
SELECT * FROM table LIMIT 10 OFFSET 20;
-- 兼容SQLServer
SELECT * FROM table ORDER BY id OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
人大金仓 (KingbaseES)
sql复制代码
-- 标准PG语法
SELECT * FROM table LIMIT 10 OFFSET 20;
-- 兼容Oracle
SELECT * FROM (SELECT t.*,ROWNUM rn FROM table t) WHERE rn BETWEEN 21 AND 30;
MySQL
sql复制代码
SELECT * FROM table LIMIT 20, 10;
-- 标准写法
SELECT * FROM table LIMIT 10 OFFSET 20;
转换规则
MySQL ↔ OceanBase:分页语法完全一致
MySQL → Gauss / 金仓 / 达梦:LIMIT m,n 改为 LIMIT n OFFSET m
MySQL → SQLServer:改为 OFFSET m ROWS FETCH NEXT n ROWS ONLY
4. 字符串函数
功能
GaussDB
OceanBase
SQLServer
达梦 (DM8)
人大金仓 (KingbaseES)
MySQL
字符串拼接
`a
b`
CONCAT(a, b)
a + b
CONCAT() 或 `
获取字符串长度
LENGTH(s)
LENGTH(s)、CHAR_LENGTH(s)
LEN(s)
LENGTH(s)
LENGTH(s)
LENGTH(s)、CHAR_LENGTH(s)
字符串截取
SUBSTRING(s, start, len)
SUBSTRING(s, start, len)
SUBSTRING(s, start, len)
SUBSTRING(s, start, len)
SUBSTRING(s, start, len)
SUBSTRING(s, start, len)
左侧截取
LEFT(s, n)
LEFT(s, n)
LEFT(s, n)
LEFT(s, n)
LEFT(s, n)
LEFT(s, n)
右侧截取
RIGHT(s, n)
RIGHT(s, n)
RIGHT(s, n)
RIGHT(s, n)
RIGHT(s, n)
RIGHT(s, n)
去除首尾空格
TRIM(s)
TRIM(s)
LTRIM(RTRIM(s))
TRIM(s)
TRIM(s)
TRIM(s)
转大写
UPPER(s)
UPPER(s)
UPPER(s)
UPPER(s)
UPPER(s)
UPPER(s)
转小写
LOWER(s)
LOWER(s)
LOWER(s)
LOWER(s)
LOWER(s)
LOWER(s)
字符串替换
REPLACE(s, a, b)
REPLACE(s, a, b)
REPLACE(s, a, b)
REPLACE(s, a, b)
REPLACE(s, a, b)
REPLACE(s, a, b)
查找字符位置
POSITION(sub IN s)
LOCATE(sub, s)、INSTR(s, sub)
CHARINDEX(sub, s)
INSTR(s, sub)、CHARINDEX
POSITION(sub IN s)、INSTR
INSTR(s, sub)、LOCATE
5. 日期时间函数
功能
GaussDB
OceanBase
SQLServer
达梦 (DM8)
人大金仓 (KingbaseES)
MySQL
获取当前日期时间
CURRENT_TIMESTAMP、NOW()
NOW()、CURRENT_TIMESTAMP
GETDATE()、SYSDATETIME()
SYSDATE、NOW()
NOW()、CURRENT_TIMESTAMP
NOW()、SYSDATE()
获取当前日期
CURRENT_DATE
CURDATE()
CAST(GETDATE() AS DATE)
TRUNC(SYSDATE)
CURRENT_DATE
CURDATE()
日期格式化
TO_CHAR(d, 'YYYY-MM-DD')
DATE_FORMAT(d, '%Y-%m-%d')
FORMAT(d, 'yyyy-MM-dd')
TO_CHAR(d, 'YYYY-MM-DD')
TO_CHAR(d, 'YYYY-MM-DD')
DATE_FORMAT(d, '%Y-%m-%d')
字符串转日期
TO_DATE(s, 'YYYY-MM-DD')
STR_TO_DATE(s, '%Y-%m-%d')
CONVERT(DATE, s, 23)
TO_DATE(s, 'YYYY-MM-DD')
TO_DATE(s, 'YYYY-MM-DD')
STR_TO_DATE(s, '%Y-%m-%d')
日期加减运算
d + INTERVAL '1 day'
DATE_ADD(d, INTERVAL 1 DAY)
DATEADD(DAY, 1, d)
DATEADD(d, 1, 'DAY')
d + INTERVAL '1 day'
DATE_ADD(d, INTERVAL 1 DAY)
计算日期差值
d1 - d2
DATEDIFF(d1, d2)
DATEDIFF(DAY, d2, d1)
DATEDIFF(d1, d2)
d1 - d2、DATEDIFF(d1,d2)
DATEDIFF(d1, d2)
提取年份
EXTRACT(YEAR FROM d)
YEAR(d)
YEAR(d)
YEAR(d)、EXTRACT(YEAR FROM d)
EXTRACT(YEAR FROM d)
YEAR(d)
提取月份
EXTRACT(MONTH FROM d)
MONTH(d)
MONTH(d)
MONTH(d)
EXTRACT(MONTH FROM d)
MONTH(d)
提取日期
EXTRACT(DAY FROM d)
DAY(d)
DAY(d)
DAY(d)
EXTRACT(DAY FROM d)
DAY(d)
6. 条件函数
功能
GaussDB
OceanBase
SQLServer
达梦 (DM8)
人大金仓 (KingbaseES)
MySQL
空值替换
COALESCE(a, b)
IFNULL(a, b)、COALESCE(a, b)
ISNULL(a, b)、COALESCE(a, b)
NVL(a, b)、COALESCE(a, b)
COALESCE(a, b)、NVL(a, b)
IFNULL(a,b)、COALESCE(a,b)
多条件判断
CASE WHEN ... THEN ... END
CASE WHEN ... THEN ... END
CASE WHEN ... THEN ... END
CASE WHEN ... THEN ... END
CASE WHEN ... THEN ... END
CASE WHEN ... THEN ... END
简易 IF 判断
CASE WHEN cond THEN a ELSE b END
IF(cond, a, b)
IIF(cond, a, b)
IF(cond, a, b)、CASE
CASE WHEN cond THEN a ELSE b END
IF(cond, a, b)
相等置空
NULLIF(a, b)
NULLIF(a, b)
NULLIF(a, b)
NULLIF(a, b)
NULLIF(a, b)
NULLIF(a, b)
7. 聚合与分组函数
功能
GaussDB
OceanBase
SQLServer
达梦 (DM8)
人大金仓 (KingbaseES)
MySQL
字符串行转列聚合
STRING_AGG(col, ',')
GROUP_CONCAT(col SEPARATOR ',')
STRING_AGG(col, ',')
WM_CONCAT(col)、STRING_AGG
STRING_AGG(col, ',')
GROUP_CONCAT(col SEPARATOR ',')
去重统计数量
COUNT(DISTINCT col)
COUNT(DISTINCT col)
COUNT(DISTINCT col)
COUNT(DISTINCT col)
COUNT(DISTINCT col)
COUNT(DISTINCT col)
8. 表结构语法
字段注释
sql复制代码
-- GaussDB / 达梦 / 人大金仓
COMMENT ON COLUMN table.col IS '注释';
-- OceanBase / MySQL
col VARCHAR(100) COMMENT '注释';
-- SQLServer
EXEC sp_addextendedproperty 'MS_Description','注释','SCHEMA','dbo','TABLE','table','COLUMN','col';
索引创建
sql复制代码
-- 六库通用基础索引
CREATE INDEX idx_name ON table(col);
-- 人大金仓 指定索引类型
CREATE INDEX idx_name ON table USING btree(col);
-- 达梦 聚集索引
CREATE CLUSTER INDEX idx_name ON table(col);
9. 特殊语法
插入或更新(UPSERT)
sql复制代码
-- GaussDB、人大金仓
INSERT INTO t VALUES(1,'test') ON CONFLICT(id) DO UPDATE SET name=EXCLUDED.name;
-- OceanBase、MySQL
INSERT INTO t VALUES(1,'test') ON DUPLICATE KEY UPDATE name=VALUES(name);
-- SQLServer、达梦
MERGE INTO t USING(VALUES(1,'test')) s ON t.id=s.id
WHEN MATCHED THEN UPDATE SET name=s.name
WHEN NOT MATCHED THEN INSERT(id,name)VALUES(s.id,s.name);
批量插入数据
六种数据库语法完全通用
sql复制代码
INSERT INTO table(col1,col2)VALUES(1,'a'),(2,'b'),(3,'c');