1. 等于和不等于操作符

SQL Server PostgreSQL 说明
= = 等于(相同)
!= 或 <> <> 或 != 不等于(PostgreSQL 两者都支持,但推荐使用 <>

2. NULL 值比较

SQL Server PostgreSQL 说明
IS NULL IS NULL 相同
IS NOT NULL IS NOT NULL 相同
= NULL 无效 SQL Server 中 = NULL 总是返回 UNKNOWN,PostgreSQL 中会报错
<> NULL 无效 同上

最佳实践:永远使用 IS NULL 或 IS NOT NULL 来检查 NULL 值

3. 字符串比较

注意事项 SQL Server PostgreSQL
大小写敏感 默认不敏感 默认敏感
排序规则 可指定 可指定
空字符串与NULL '' 与 NULL 不同 '' 与 NULL 不同

解决方案

  • 如需不敏感比较,PostgreSQL 中使用 WHERE lower(column) = lower('value')

  • 或使用 WHERE column ILIKE 'value'

4. LIKE 操作符

SQL Server PostgreSQL 说明
LIKE LIKE 相同
NOT LIKE NOT LIKE 相同
% 通配符 % 通配符 相同
_ 通配符 _ 通配符 相同
[a-z] 模式 [a-z] 无效 PostgreSQL 使用 SIMILAR TO 或正则表达式

转换示例

sql

-- SQL Server
WHERE name LIKE '[A-Z]%'

-- PostgreSQL
WHERE name ~ '^[A-Z]'  -- 使用正则表达式
-- 或
WHERE name SIMILAR TO '[A-Z]%'

5. TOP 与 LIMIT

SQL Server PostgreSQL 说明
TOP n LIMIT n 限制返回行数

转换示例

sql

-- SQL Server
SELECT TOP 10 * FROM table

-- PostgreSQL
SELECT * FROM table LIMIT 10

6. 日期比较

SQL Server PostgreSQL 说明
GETDATE() now() 当前日期时间
DATEDIFF(day, date1, date2) date2 - date1 日期差

转换示例

sql

-- SQL Server
WHERE create_date > GETDATE() - 1

-- PostgreSQL
WHERE create_date > now() - interval '1 day'

7. 类型转换

SQL Server PostgreSQL 说明
CONVERT(VARCHAR, col) CAST(col AS TEXT) 或 col::text 类型转换
TRY_CONVERT() CAST(col AS type) 加异常处理 PostgreSQL 无 TRY_CONVERT

8. 布尔值比较

SQL Server PostgreSQL 说明
bit 类型 (0/1) boolean (true/false) 类型不同

转换示例

sql

-- SQL Server
WHERE is_active = 1

-- PostgreSQL
WHERE is_active = true

最佳实践建议

  1. 迁移后务必测试所有比较操作

  2. 特别注意 NULL 值处理差异

  3. 字符串比较考虑大小写敏感性

  4. 使用 PostgreSQL 的 EXPLAIN ANALYZE 检查查询性能

  5. 复杂查询考虑重写为 PostgreSQL 优化形式

这些差异是 SQL Server 和 PostgreSQL 语法转换中最常见的比较操作问题,正确转换这些操作符可以避免迁移后的逻辑错误。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐