2020年6月5日 星期五

[字串函數]取得字串長度

傳回指定字串的字元(char)或位元(byte)之數量(或長度)

指令說明:
ORACLE: 提供LENGTHLENGTHB函數,LENGTH傳回指定字串之字元(char)數量,LENGTHB則傳回位元(byte)數量。語法如下:
語法
說明
LENGTH(str)
傳回字串(str)中的字元(char)數量。
LEHGTHB(str)
傳回字串(str)中的位元(byte)數量。
字元與編碼設定有關,UTF8編碼,1個中文字為3個字元,而Big5則為2個字元。可使用以指令或由V$NLS_PARAMETERS中查詢。
SELECT USERENV('language') FROM DUAL
---------------------------------
結果: TRADITIONAL CHINESE_TAIWAN.ZHT16MSWIN950

MSSQL: 提供LENDATALENT等函數,LEN傳回指定字串之字元(char)數量DATALENTH則傳回位元(byte)數量,語法如下:
語法
說明
LEN(str)
傳回字串(str)中的字元(char)數量,但LEN函數將忽略字串右側(字尾)空白不計數。
DATALENGTH (str)
傳回字串(str)中的位元(byte)數量。
範例:
SELECT LEN('ABC  ')
       , DATALENGTH('ABC  ')
      , LEN('中文字')
       , DATALENGTH ('中文字')
       , DATALENGTH ('中文字' COLLATE Latin1_General_CI_AS)
       , SERVERPROPERTY('Collation')
------- ---- ---- ---- ---- ---- ----------------------
結果:   3     5    3   6    3    Chinese_Taiwan_Stroke_CI_AS 
長度與定序(Collation)有關,測試環境為Chinese_Taiwan_Stroke_CI_AS,中文字為2byte;如模擬Latin1_General_CI_AS時,則為1

LENGTH/LEN指令比較:
取得字串(str)字元(char)之數量(或長度)比較如下:
ORACLE
MSSQL
語法
LENGTH(str)
LEN(str)
計數字元數(Char)
ü
ü
字尾空白捨去
û
ü
(將捨去字尾空白,改用DATALENGTH替代)
計算位元數(Byte)
LENGTHB
DATALENGTH

範例:


ORACLE
MSSQL
具空白

SELECT LENGTH('ABC ')
     , LENGTHB('ABC ')
FROM DUAL
-------- ------- 
結果: 4   4      
SELECT LEN('ABC ')
, DATALENGTH('ABC ')

-------- ------- 
結果: 3   4       
不具空白(字元)

SELECT LENGTH('ABC')
     , LENGTH('中文字')
     , LENGTH('中文A')
FROM DUAL
-------- -------  ------
結果: 3   3         3
SELECT LEN('ABC')
, LEN('中文字')
     , LEN('中文A')

-------- -------  ------
結果: 3   3         3
不具空白(位元)


SELECT LENGTHB('ABC')
     , LENGTHB('中文字')
     , LENGTHB('中文A')
FROM DUAL
-------- -----  -----
結果: 3   6      5
SELECT DATALENGTH ('ABC')
, DATALENGTH ('中文字')
      , DATALENGTH ('中文A')

-------- -----  ------
結果: 3   6      5


沒有留言:

張貼留言