一、数据类型映射差异
可以使用KDTS将SQL Server数据库迁移至PG
SQL Server 类型 | PostgreSQL 对应类型 | 说明 |
---|---|---|
VARCHAR(n) |
VARCHAR(n) / TEXT |
PostgreSQL 中 VARCHAR(n) 无性能损耗,TEXT 等效于 VARCHAR(无限制) |
NVARCHAR(n) |
VARCHAR(n) |
PostgreSQL 默认 UTF-8 编码,无需区分 VARCHAR /NVARCHAR |
DATETIME |
TIMESTAMP |
存储日期 + 时间,PostgreSQL TIMESTAMP 无 SQL Server 的精度限制 |
DATETIME2(n) |
TIMESTAMP(n) |
支持自定义精度(如 TIMESTAMP(3) 对应毫秒级) |
BIT |
BOOLEAN / SMALLINT |
BIT(1) 对应 BOOLEAN ,多值 BIT(n) 需用 SMALLINT 或 BYTEA |
二、常用函数 / 操作符差异
功能场景 | SQL Server 语法 | PostgreSQL 语法 | 兼容方案 |
---|---|---|---|
字符串拼接 | 'a' + 'b' |
`'a' | |
取字符串长度 | LEN('test') |
LENGTH('test') |
|
日期格式化 | FORMAT(GETDATE(), 'yyyy-MM-dd') |
TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD') |
|
获取当前时间 | GETDATE() / SYSDATETIME() |
CURRENT_TIMESTAMP / NOW() |
|
空值处理(替换) | ISNULL(col, '默认值') |
COALESCE(col, '默认值') |
|
分页(TOP/LIMIT) | SELECT TOP 10 * FROM t |
SELECT * FROM t LIMIT 10 |
LIMIT 5 OFFSET 10 |
分页(OFFSET) | OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY |
LIMIT 5 OFFSET 10 |
LIMIT 5 OFFSET 10 |
删除数据 | delete table(支持) | delete from table | delete from table |
存储过程与函数 | 存储过程用 CREATE PROCEDURE |
CREATE FUNCTION (推荐用函数)(其中:RETURNS TABLE 和 OUT 参数冲突 两者都是定义输出列的方式,不能同时使用) |
|
布尔条件查询 | isBoolean =1 | isBoolean =true | isBoolean ='true' |
获取时间差函数 | DATEIFF(YEAR,字段,GETDATE()) | EXTARCT(YEAR FROM (CURRENT_DATE,字段)) | |
WITH(NOLOCK) | 有此方言 | 无此方言 |
三、特有函数兼容
特有函数多用cast和substring进行兼容转换