指令說明:
ORACLE: 提供LENGTH、LENGTHB函數,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: 提供LEN、DATALENT等函數,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,中文字為2個byte;如模擬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
|
沒有留言:
張貼留言