天天看点

【PostgreSql】------- Sqlserver与postgreSQL 区别差异

1.sqlserver----sql语句:
 
   select * from  DCS_RISK where 1=1  and  SUPERINTENDENT_DPT_ID IN (select ID FROM ORG_DEPARTMENT WHERE CODEPATH LIKE'03.03.%') AND STATUS_NAME ='已确认' AND ISNULL(IS_CLOSED,0)=0 ORDER BY  FIND_TIME DESC  offset 0 rows fetch next 15 rows only
 
postgresql-----sql语句: 
  
 select * from  "DCS_RISK" where 1=1  and  "SUPERINTENDENT_DPT_ID" IN (select "ID" FROM "ORG_DEPARTMENT" WHERE "CODEPATH" LIKE'03.02.%') AND "STATUS_NAME" ='已确认' and ("IS_CLOSED" IS NULL OR "IS_CLOSED"=0)  ORDER BY  "FIND_TIME" DESC  offset 0 rows fetch next 15 rows only
 
区别:
1.1 postgresql表名与字段名要用双引号 否则将会变成小写字符.
 
解决办法:
表名 SQLSERVER-> DCS_RISK == POSTGRESQL->”DCS_RISK”;
字段名 SQLSERVER-> STATUS_NAME == POSTGRESQL->”STATUS_NAME”
 
备注:(sqlserver 表中 表名与字段名上添加“双引号”不会报错 并且没有“字符大小写”控制)。
 
1.2 Sqlserver中ISNULL函数在postgresql 中是不能使用的!
 
   解决办法:ISNULL(IS_CLOSED,0)=0 == ("IS_CLOSED" IS NULL OR "IS_CLOSED"=0)
 
1.3 Sqlserver 中 字符类型是数值型 按 空字符串 查询 可以使用 在 postgresql中 字符类型是数值型是不可使用的!
 
   例如:
DCS_RISK表中的 IS_CLOSED 它是int 类型   使用 IS_CLOSED=”” 作为条件会报错!
 
------------------------------------------------END-----------------------------------------
 
 
 
 
4.PostgreSQL和SQL Server的模糊匹配like是不一样的,PostgreSQL的like是区分大小写的,SQL Server不区分。如果想让PostgreSQL的like也不区分大小写的话,可以使用ilike。或者使用lower或者upper都转换成小写或者大写再模糊匹配,这种方式的SQL两种数据库都兼容。
select * from t_user where name ilike '%zhang%';
select * from t_user where upper(name) like upper('%zhang%');
select * from t_user where lower(name) like lower('%zhang%');
 
5.PostgreSQL在做条件查询的时候是强类型校验的,但是SQL Server是弱类型。也就是说 用数值类型值 查询字符类型值 是报错的 需要用 单引号包起来呀  反之 用字符串数值 查询 数组类型值 是不报错的
select * from t_user where code = 77771; // code 是字符类型 77771 是数据值型 执行就会报错 所以要用 ‘77771’ 单引号包起来 查询
 
6.SQL Server的查询如果末尾有空白的话,SQL Server会忽略但是PostgreSQL不会。
 
7.PostgreSQL和SQL Server的默认order by行为是不一致的。order by的字段如果是null,PostgreSQL会将其放在前面,SQLServer则将其放在后面。
 
8.SQL Server使用" + “号来拼接字符串,并且在2012版本之前不支持concat函数。PostgreSQL使用” || "来拼接字符串,同时支持concat函数。           

继续阅读