簡體   English   中英

Oracle空字符串/ NULL

[英]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 ServerOracle中都可用(它是ANSI標准的一部分)。

select *
  from table
 where nullif(project, '') is not null

它的工作原理是因為Oracle將空字符串計算為NULL。 值得注意的是,如果第一個表達式為NULL,Oracle不會評估NULLIF() ,但它確實以這種方式工作。

事實:

  • Oracle將空轉換為NULL
  • SQL Server無法翻譯。

因此,如果您的Oracle和SQL Server數據庫具有相同的內容,則結果是相同的,這是您真正想要的

where (project is not null OR project <> '')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM