在SQL Server和Oracle中具有空值的列
在SQL Server和Oracle中具有空值的列
在Oracle中,使用\'\'和\'is null\'都会返回NULL值:\n
SELECT COL1 FROM TABLE WHERE COL1='' --> 返回带有NULL值的COL1 SELECT COL1 FROM TABLE WHERE COL1 IS NULL --> 返回带有NULL值的COL1
\n这两个查询返回相同的行集。\n在Microsoft SQL中:\n
SELECT COL1 FROM TABLE WHERE COL1='' --> 返回带有值的COL1 SELECT COL1 FROM TABLE WHERE COL1 IS NULL --> 返回带有 值的COL1
\n这里,第一个和第二个查询返回不同的行集。\n为什么Microsoft SQL的结果集和Oracle的结果集之间会有差异?\n如何在Microsoft SQL中检索出包含\'\'和NULL值的两个行集?
在SQL Server和Oracle中,当我们需要筛选出包含空值的列时,可以使用不同的方法。以下是解决该问题的方法:
1. 在SQL Server中,可以使用IS NULL或IS NOT NULL运算符来筛选出包含空值的列。示例代码如下:
SELECT * FROM Table WHERE col IS NULL
或
SELECT * FROM Table WHERE col IS NOT NULL
2. 在Oracle中,可以使用IS NULL或IS NOT NULL运算符来筛选出包含空值的列。示例代码如下:
SELECT * FROM Table WHERE col IS NULL
或
SELECT * FROM Table WHERE col IS NOT NULL
无论是在SQL Server还是Oracle中,我们都可以使用IS NULL或IS NOT NULL运算符来筛选出包含空值的列。这些方法在两个数据库中都是通用的,可以帮助我们快速准确地找到需要的数据。
在SQL Server和Oracle中,存在一个问题:列中的空值。在SQL Server中,如果一个列的值为空字符串,那么它将被视为一个有效的值。但是在Oracle中,空字符串会被自动转换为null值。这就是为什么在两个数据库中检索相同数据时,结果集会有所不同的原因。
为了从两个数据库中检索到相同的数据,可以使用isnull函数。在SQL Server中,可以使用以下代码:
SELECT COL1 FROM TABLE WHERE ISNULL(COL1, '') = ''
这将返回列COL1中的空值。
然而,在Oracle中没有isnull函数。在Oracle中,可以使用以下方法来解决这个问题:
stackoverflow.com/questions/3523036/…
这个链接提供了解决方案的更多信息。
感谢提供链接,我现在可以理解这个问题的区别了。通过使用isnull函数和Oracle中的等效方法,可以解决在SQL Server和Oracle中列中空值的问题。
在SQL Server中,空字符串''
被视为非空。而在Oracle中,情况较为复杂。在PL/SQL中,x char := ''
被视为非空,但是作为varchar2
类型的空字符串''
与null
是完全相同的,具体解释可以参考这里。而在查询中,由于COL
是varchar2
类型,所以条件COL = ''
永远不会成立。
如果需要在两种数据库中都能正常工作的条件,请使用coalesce
函数。
select * from TAB where coalesce(COL,'SOME_UNIQUE_STRING') = coalesce(FILTER_PARAM, 'SOME_UNIQUE_STRING')
这样的条件可以在COLUMN
等于FILTER
时返回行,同时也考虑了两者都为null
或空字符串的情况。
感谢Kacper提供的信息。