[英]Oracle empty string/NULL
我必須編寫一個對MS SQL Server和Oracle有效的SQL SELECT語句。 我必須使用舊的客戶數據庫,所以我無法改變數據庫設計中的任何內容......
問題是該表有一個可為空的列'project',它是一個varchar,在某些情況下填充了一個空字符串 - 由oracle轉換為NULL。 那么如何選擇所有具有NON空“項目”的列?
WHERE project IS NOT NULL works for oracle
WHERE project <> '' works for MS
WHERE project IS NOT NULL AND project <> '' works for MS, but not for Oracle
謝謝,Marko
因為條件'' = ''
僅在SQL-Server中為真(它相當於'' IS NOT NULL
)並且條件'' IS NULL
僅在Oracle中為真,您可以使用:
WHERE ( project > '' AND '' = '') -- for SQL-Server
OR ( project IS NOT NULL AND '' IS NULL) -- for Oracle
請注意,如果您的值僅為空格,則SQL-Server和Oracle之間的處理方式不同。 測試SQL-Fiddle-1(Oracle)和SQL-Fiddle-2(SQL-Server) 。
您可以使用NULLIF()
,它在SQL Server和Oracle中都可用(它是ANSI標准的一部分)。
select *
from table
where nullif(project, '') is not null
它的工作原理是因為Oracle將空字符串計算為NULL。 值得注意的是,如果第一個表達式為NULL,Oracle不會評估NULLIF()
,但它確實以這種方式工作。
事實:
因此,如果您的Oracle和SQL Server數據庫具有相同的內容,則結果是相同的,這是您真正想要的
where (project is not null OR project <> '')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.