2016-12-23 104 views
0

在Oracle:= '' 和 '爲空' 返回NULL值列在SQL Server空值VS甲骨文

SELECT COL1 FROM TABLE WHERE COL1='' --> RETURN COL1 WITH NULL VALUES 
SELECT COL1 FROM TABLE WHERE COL1 IS NULL --> RETURN COL1 WITH NULL VALUES 

兩個查詢返回相同的行集。

在Microsoft SQL:

SELECT COL1 FROM TABLE WHERE COL1='' --> RETURN COL1 WITH <BLANK> VALUES 
SELECT COL1 FROM TABLE WHERE COL1 IS NULL --> RETURN COL1 WITH <NULL> VALUES 

這裏的第一和第二查詢返回不同的行集。

爲什麼Microsoft SQL結果集和Oracle結果集之間有區別?

我該如何檢索Microsoft SQL中的兩組行? (值爲'',值爲NULL)。

+1

因爲'''(空字符串)'是** NOT **等於'NULL'。不確定'Oracle' –

+0

在'Oracle'中,空字符串會自動轉換爲空。 –

回答

0

在SQL Server ''不爲空。在Oracle它有點複雜x char := ''不爲空,在PL/SQLvarchar2空字符串''null完全相同的解釋here而在查詢的情況下,這是varchar2如此條件COL = ''是不正確的。

如果您需要能夠在兩個數據庫中工作的條件,請使用​​3210函數。

select * from TAB 
    where coalesce(COL,'SOME_UNIQUE_STRING') = coalesce(FILTER_PARAM, 'SOME_UNIQUE_STRING') 

這種條件應返回行時COLUMN等於FILTER以及兩者都爲零或爲空字符串。

+0

感謝Kacper的信息。 –

0

要檢索兩組數據,可以使用isnull

SELECT COL1 FROM TABLE WHERE ISNULL(COL1, '') = '' 

Oracle自動將空字符串轉換爲空值,而sql server不會,這就是結果集不同的原因。

你可以找到關於此位置的詳細信息: Why does Oracle 9i treat an empty string as NULL?

+0

Oracle中沒有'isnull'。 http://stackoverflow.com/questions/3523036/what-is-the-oracle-equivalent-of-sql-servers-isnull-function – Kacper

+0

非常感謝這個鏈接。我現在可以瞭解這些差異。 –

0

爲避免定義唯一的字符串,可以使用case語句。

通過這種方式我們可以評估col當null或empty設置爲相同的值以進行比較。由於我的知識情況是DBMS獨立,所以這兩者都應該起作用。

SELECT * 
FROM Table 
WHERE case when col is NULL or col = '' then 1 else 0 end = 1