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