在Oracle中:=''且'为null'返回NULL值
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)。
答案 0 :(得分:0)
要检索这两组数据,您可以使用break
。
isnull
Oracle会自动将空字符串转换为空值,而sql server则不会,这就是结果集不同的原因。
您可以在此处找到更多相关信息: Why does Oracle 9i treat an empty string as NULL?
答案 1 :(得分:0)
在SQL Server中''
不为空。在Oracle中,x char := ''
中的PL/SQL
有点复杂,但varchar2
空字符''
与null
完全相同,如here所述如果是查询,则为varchar2
,因此条件COL = ''
永远不会成立。
如果您需要适用于两个数据库的条件,请使用coalesce
函数。
select * from TAB
where coalesce(COL,'SOME_UNIQUE_STRING') = coalesce(FILTER_PARAM, 'SOME_UNIQUE_STRING')
当COLUMN
等于FILTER
时,此类条件应返回行,并且两者都为空或空字符串。
答案 2 :(得分:0)
要避免定义唯一字符串,可以使用case语句。
这样我们在col或null时将col设置为相同的值进行比较。由于我所知的案例是DBMS独立的,因此这应该适用于两者。
SELECT *
FROM Table
WHERE case when col is NULL or col = '' then 1 else 0 end = 1