0

我只有空格作为长度为 121 个字符的列中的行值。

我想在 oracle 中编写一个查询来检查列字符串是否只有空格。

例如,如果说列地址。一行只包含空格(所有 121 个字符都是空格)。

我想要一个查询来检查该行是否只包含空格。

select * from table where address <> ' ';

但这不起作用,它只检查 1 个空格。我希望查询检查所有 121 个空格。

4

3 回答 3

1

如果您将检查 121 个空格作为学习练习,那没关系,但如果您在生产应用程序的列中存储 121 个空格,则您的设计可能很糟糕。

如果列类型是CHAR它可能应该更改为VARCHAR(或VARCHAR2在 Oracle 中)。如果它已经是VARCHAR/VARCHAR2你应该将一个空字符串存储为一个空字符串。

如果您需要将值填充到 121 个空格,请在查询时注意这一点:

  • 甲骨文:SELECT RPAD(NVL(address, ' '), 121) FROM myTable
  • MySQL:SELECT RPAD(address, 121, ' ') FROM myTable

如果您想查明该值是否为空,请记住 Oracle 将空字符串视为NULL. MySQL 将其视为空字符串:

  • 甲骨文:SELECT * FROM myTable WHERE address IS NULL
  • MySQL:SELECT * FROM myTable WHERE address = ''
于 2013-08-23T13:31:49.337 回答
1

您可以在列上运行 TRIM。根据您的 DBMS,Null 字符串被视为 aNULL或空字符串 ''。但是对于将空字符串视为 a 的 Oracle NULL,您应该能够:

select * from table where LTRIM(RTRIM(address)) IS NOT NULL

请注意,TRIM 会删除所有空格,而不仅仅是空格字符。

于 2013-08-23T12:41:11.197 回答
0

使用REPLACE()函数并将其结果与 null 进行比较

SELECT * FROM table WHERE REPLACE(address,' ') IS NULL;

小提琴

于 2013-08-23T12:42:10.890 回答