如何在oracle查询中将空白转换为NULL

时间:2017-04-12 13:18:43

标签: sql oracle

我在sql查询中的名字列中有空白。如何替换显示为null

SELECT Name from table

3 个答案:

答案 0 :(得分:1)

TRIM function提供此功能。

它的用法如下:

select TRIM(Name) from table

它将从字段Name的结果中删除前导和尾随空格。

答案 1 :(得分:0)

也许你在谈论空间?

以下是如何删除任何常见的“空白”字符:

  • regexp_replace(有趣的是......只是为了注意[[:space:]]
select '<'||
  regexp_replace(
   'a'||CHR(9)||' b'||CHR(10)||CHR(11)
      ||'c'||CHR(12)||CHR(13)||' d'
 , '[[:space:]]','')
||'>' 
from dual;
  • 效率更高:避免regexp_replace ...:使用TRANSLATE
select '<'||
  TRANSLATE(
   'a'||CHR(9)||' b'||CHR(10)||CHR(11)
      ||'c'||CHR(12)||CHR(13)||' d' -- complicate string with blank
  ,'A'||CHR(9)||CHR(10)||CHR(11)||CHR(12)||CHR(13)||' '
  ,'A') -- this 'A' is a trick to replace by null ('')
||'>'    -- to show where string stops
from dual;

答案 2 :(得分:0)

TRIM从左侧和右侧删除空白字符,因此如果您的字符串只包含空格,那么您将得到一个空字符串,在Oracle中为NULL。

select trim(name) from mytable;

这也会将' Mary Smith '更改为'Mary Smith',但我想您不会介意: - )

但是,如果您想考虑任何空白,例如标签也是如此,然后TRIM还不够。您可以使用REGEXP_REPLACE替换仅包含空格的所有名称。

regexp_replace(name, '^[[:space:]]*$', null) from mytable;

如果您还想从任何名称修剪空格(以便' Mary Smith '再次成为'Mary Smith'),那么:

select regexp_replace(name, '^[[:space:]]*([^[:space:]]*)[[:space:]]*', '\1') from mytable;