SQL 去除空白 空白字元轉為 NULL

TL;DR
使用正則表達式即可去除任何空白: [[:space:]]

正文:
剛剛遇到一個問題,就是在 sql中有兩個欄位,如果 A欄位是 NULL或是空白就使用 B欄位
但是 A欄位是空白但沒有正常換到 B欄位去
註:不能使用 COALESCE,因為 COALESCE只會判斷是不是NULL,而我們也要判斷全部皆是空白的情況

在測試中感覺這題很簡單,因為只要使用 TRIM就可以了,但我忽略了一個情況:全形空白!

測試語法:
select '    '       三個半形空白符號,
TRIM(' ') TRIM三個半形空白符號,
'   ' 三個全形空白符號,
TRIM('   ') TRIM三個全形空白符號
from DUAL;
測試結果:

由此可知,TRIM對於全形空白是無效的,所以只好派出正則表達式!
語法:
select '    '                                三個半形空白符號,
TRIM(' ') TRIM三個半形空白符號,
TRIM(' ') REGEX三個半形空白符號,
REGEXP_REPLACE(' ', '[[:space:]]') 三個全形空白符號,
TRIM('   ') TRIM三個全形空白符號,
REGEXP_REPLACE('   ', '[[:space:]]') REGEX三個全形空白符號
from DUAL;
執行結果:

結論:使用正則表達式可以完美處理全形和半形空白的情況!

留言