SQL字符串比较-如何忽略空格

Mat*_*NNZ 3 sql oracle

我准备了一个 SQL 查询,必须在多个数据库(Oracle 和 Sybase)上运行,其中某些数据可能以不同方式存储。

我注意到数据存储的差异之一是空白字符串。例如,在PRODUCT_TYPE下面的列中,请查看第二条记录:

在此输入图像描述

这个用红色圈出的“空字符串”(数据类型为CHAR(15))在某些数据库中等于,而在其他一些数据库中''等于。' '长度从来都不是恒定的,并且有几个字段具有这样的行为。

因此,由于我需要过滤这些“空字符串”,所以我应该更改子句中的以下语句WHERE

WHERE PRODUCT_TYPE = ''
Run Code Online (Sandbox Code Playgroud)

...因为上面的字符串将与“功能上”' '不同的字符串不同。''因此,我想以“忽略空格”的方式做出声明,即' '等于''等于等' '。我应该如何进行此更改才能使其起作用?

我尝试过简单的替换方法:

WHERE REPLACE(PRODUCT_TYPE,' ','') = ''
Run Code Online (Sandbox Code Playgroud)

...但它似乎不起作用,可能是因为我应该使用不同的角色。为了进行测试,下面'有一个复制粘贴的示例,说明我在这些“空字符串”中找到的内容:

'               '
Run Code Online (Sandbox Code Playgroud)

理想情况下,它应该是一个“非特定 SQL”解决方案,因为我必须在 Oracle 和 Sybase RDBMS 上运行相同的查询。任何想法?

Vam*_*ala 5

您可以trim在列上使用。

where trim(product_type) is null
Run Code Online (Sandbox Code Playgroud)

上述内容不是独立于 DBMS 的,因为 Sybase 不提供该trim功能。但是,以下方法在 Sybase 和 Oracle 中都适用:

where rtrim(ltrim(product_type)) is null
Run Code Online (Sandbox Code Playgroud)