我准备了一个SQL查询,必须在几个数据库(Oracle和Sybase)上运行,这些数据库可能以不同的方式存储数据。
我注意到,数据存储的区别之一是空白字符串。
例如,在下面的PRODUCT_TYPE
列中,请查看第二条记录:
在某些数据库中,用红色圆圈圈起的“空字符串”(数据类型为CHAR(15)
)等于''
,而在另一些数据库中则等于' '
。长度从不恒定,并且有几个字段具有相同的行为。
因此,由于需要过滤这些“空字符串”,因此应在WHERE
子句中更改以下语句:
WHERE PRODUCT_TYPE = ''
...因为以上内容将
' '
字符串视为不同于''
的字符串,即使“从功能上来说”不是这样。因此,我想以“忽略空格”的方式做出声明,即
' '
等于''
等于' '
等。我应该如何进行此更改以使其起作用?
我尝试了简单的替换方法:
WHERE REPLACE(PRODUCT_TYPE,' ','') = ''
...但是似乎无效,可能是因为我应该使用其他字符。
为了测试,在下面的
'
中有一个复制粘贴的示例,这些示例是我在这些“空字符串”中找到的:' '
理想情况下,它应该是“非特定的SQL”解决方案,因为我将不得不在Oracle和Sybase RDBMS上运行相同的查询。任何的想法?
最佳答案
您可以在列上使用trim
。
where trim(product_type) is null
上面的内容与DBMS无关,因为Sybase不提供
trim
函数。但是,以下方法在Sybase和Oracle中均适用:
where rtrim(ltrim(product_type)) is null