2020年6月5日 星期五

[字串函數]移除前後空白(或特定字元)

移除字串前後空白(或特定字元)
MSSQL2017前版本提供RTRIMLTRIM兩個函數,LTRIM函數將移除字串前面(或稱左側)空白字元,RTRIM則將移除字串後方(或稱右側)空白字元,MSSQL2017增加TRIM函數,除可供剔除前後空白字元外,尚可指定特定字元
ORACLE提供與MSSQL三個基本用法相同之同名函數,但功能上更為彈性

ORACLE: 提供TRIMRTRIMLTRIM函數。語法如下:
語法
說明
TRIM(
 [[BOTH|LEADING|TRAILING] trim_char FROM]
 str
)
移除字串前後空白(或特定字元)
TRIM([[位置] [移除字元] FROM] 字串)
RTRIM(str [,trim_chars])
移除字串字尾空白(或表列字元)
LTRIM(str [,trim_chars])
移除字串字首空白(或表列字元)

範例:
SELECT TRIM(BOTH '0' FROM '01230')
--(1)  123
BOTH指定移除前後0
   , TRIM('0' FROM '01230')
--(2)  123
以預設移除前後0
   , TRIM(LEADING '0' FROM '01230')
--(3) 1230
LEADING指定移除前置0
   , TRIM(' 123 ')
--(4)  123
移除前後空白
   -----------------


   , RTRIM('35303', '03')
--(5)   35
依移除字元逐一移除,至未定義則跳離
   , RTRIM('3030', '03')
--(6) NULL
均符合移除字元定義,全部移除為NULL
   , RTRIM('5303 ')
--(7) 5303
預設移除空白
   ----------------- 


   , LTRIM(' 3030')
--(8) 3030
預設移除空白
FROM DUAL



--------- ----- ----- -----+ ----- -----  ------+ -----
結果: 123  123   1230  123  | 35     NULL   5303  | 3030
TRIM函數之trim_char 參數限制為單一字元,如違反則出現「ORA-30001 - trim set should have only one character.」錯誤。

MSSQL: MSSQL2017開始提供TRIM函數,除可供剔除前後空白字元外,尚可指定特定字元;另外先前版本提供RTRIMLTRIM兩個函數。語法如下:
語法
說明
TRIM([trim_chars FROM] str)
(2017)
移除字串前後空白(或特定字元)
RTRIM(str)
移除字串的字尾空白
LTRIM(str)
移除字串的字首空白
範例:
SELECT TRIM('0' FROM '01230')
--(1)  123
BOTH指定移除前後0
   , TRIM('03' FROM '35303')
--(2)    5
依移除字元逐一移除,至未定義則跳離
   , TRIM(' 123 ')
--(3) 123
移除前後空白
   , TRIM('03' FROM '30303')
--(4) NULL
均符合移除字元定義,全部移除為NULL
   -----------------


   , RTRIM('5303 ')
--(5) 5303
預設移除空白
   ----------------- 


   , LTRIM(' 3030')
--(6) 3030
預設移除空白
--------- ----- ----- -----+ ----- +------
結果: 123  5     123   NULL  | 5303  | 3030

指令比較:
移除字串(str)前後空白(或特定字元)比較如下:
ORACLE
MSSQL
語法
TRIM(
[[BOTH|LEADING|TRAILING] trim_char FROM]
  str
)
注意: trim_char限定為單一字元。
TRIM([trim_chars FROM] str)
(2017)

注意: 1.無法指定除位置。
      2.支援多字元定義。
剔除前後空白字元
ü
ü
剔除前後指定字元
ü (限定單一字元)
ü(表列字元)
指定位置(前或後)
ü
û (不可指定)
移除右側空白
(或指定字元)
RTRIM(str [,trim_chars])
RTRIM(str)
指定移除字元
(表列字元)
ü
û (不支援,僅可移除空白)
移除左側空白
(或指定字元)
LTRIM(str [,trim_chars])
LTRIM(str)
指定移除字元
(表列字元)
ü
û (不支援,僅可移除空白)
注意:
(1) TRIM函數: 兩種資料庫均有其限制,使用上需注意。
(2) 支援多移除字元定義者,使用上需特別小心。

範例:

ORACLE
MSSQL
移除前後空白

SELECT TRIM(' 123 ')
FROM DUAL
---------
結果: 123        
SELECT TRIM(' 123 ')
, LTRIM(RTRIM(' 123 '))

--------- ------- 
結果: 123  123       
移除前置0

SELECT
TRIM(LEADING '0' FROM '01230')
, LTRIM('01230', '0')
FROM DUAL
--------- -------
結果: 123  123
SELECT SUBSTRING(VAL
, PATINDEX('%[^0]%', VAL)
, 8000)
FROM (VALUES('0123')) A (VAL)
---------
結果: 123  
移除前置0,由於MSSQL2017所提供TRIM函數並無法指定移除位置,因此仍採用先前文章所提之方法。

沒有留言:

張貼留言