天天看點

【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函數。           

繼續閱讀