2017-04-12 200 views
0

我在sql查詢的名稱列中有空格。我如何更換以顯示爲null如何在oracle查詢中將空白轉換爲NULL

SELECT Name from table 
+1

你可以用'LTRIM(RTRIM(名稱))'。 – Nitish

+4

你能定義一個「空白」嗎?這是什麼意思?當你說你想顯示爲空,你的意思是證明不存在或字面上字符串「null」? – Ben

+0

@Ben - blank表示空格...我想顯示字符串null –

回答

1

TRIM function提供此功能。

它這樣使用:

select TRIM(Name) from table 

它將刪除開頭和結尾從結果空間現場Name

+2

當數據類型是(N)VARCHAR或(N)VARCHAR2時,一個空字符串「'」和null在Oracle中是等效的。這不會做任何事情:http://stackoverflow.com/questions/13278773/null-vs-empty-string-in-oracle – Ben

+1

@Ben不知道。那麼'TRIM'就足夠了。我相應地改變了我的答案。 –

+0

根據您的客戶端應用程序,它可能以不同的方式顯示null。爲了確保你總能看到字符串'null',當修剪後的名字爲空時,將TRIM包裹在NVL中,顯示'null'。 – BriteSponge

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; 
0

TRIM去除左,右,因此,如果您的字符串僅包含空格的,然後你會得到一個空字符串,這是NULL Oracle中的空白字符。

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;