close

字串長度測量函式分別是CHARACTER_LENGTH()、CHAR_LENGTH()、LENGTH()。
CHARACTER_LENGTH()、CHAR_LENGTH()是相同的,以UTF8來計算,中英文都可以計算。
LENGTH()也可以計算中英文,但對中文的計算會因編碼不同而計算不同,分別是UTF8一字三位,BIG5一字二位。


字串切割函式分別是SUBSTRING_INDEX(culomnName, exp, number)、SUBSTR(culomnName, startIndex, length)。
SUBSTRING_INDEX(culomnName, exp, number)︰
exp是你想開始切割的辨別字元。
number則是以正負數兩種區分,當輸入正數則顯示辨別字左方所有字元,當輸入負數則顯示右方所有字元,如果輸入0會無法辨別。

SUBSTR(culomnName, startIndex, length)︰
startIndex是欲切割起始的index,開頭第一位是1,如果輸入0會無法辨別。
length是自起始index想要切的長度,一字一位元包含空白字元也要算。

以下將由範例一一示範解說︰

使用SUBSTRING_INDEX(culomnName, exp, number)
SELECT  username, SUBSTRING_INDEX(username, '.', 1)
FROM     user


結果︰辨別字元是'.',輸入正數所以只出現左邊的所有字元
















使用 SUBSTRING_INDEX(culomnName, exp, number) 但輸入負數
SELECT  username, SUBSTRING_INDEX(username, '.', -1)
FROM     user


結果︰只出現右邊所有字元















使用CHARACTER_LENGTH(),並且限定只有字元長度8的才能出現
SELECT  username, CHARACTER_LENGTH(username)
FROM     user
WHERE   CHARACTER_LENGTH(username) = 8

結果︰只有八位元的才能出現,值得注意的是此函式會把中文字也只算一個字元。








 

使用CHAR_LENGTH(),順便練習一下字串切割,一樣限定字元長度8才能出現

SELECT  username, SUBSTRING_INDEX(username, ' ', -1) , CHAR_LENGTH(username)
FROM     user
WHERE   CHAR_LENGTH(username) = 8

結果︰本次辨別字元改成空字元,從空字元開始往右全部字元皆顯示,搭配字元計算。










使用LENGTH(),因為資料是中英文夾雜所以條件使用CHARACTER_LENGTH()
SELECT  username, LENGTH(username), CHARACTER_LENGTH(username)
FROM     user
WHERE  CHARACTER_LENGTH(username) = 8


結果︰條件使用CHARACTER_LENGTH()所以中文也算只有8位,但LENGTH()計算中文的時候則多出了6位,因為這份資料是用UTF8編碼,所以中文一字三位元。
 









使用SUBSTR(),起始以第1位開始切取4位元,並計算是否真的這個切割出來的字串有4位
SELECT username, SUBSTR(username, 1, 4), CHAR_LENGTH(SUBSTR(username, 1, 4))
FROM    user

結果︰















總結︰以目前台灣人的資料而言使用CHARACTER_LENGTH()、CHAR_LENGTH(),會比較安全,但也要看資料庫的編碼而定,而在字串切割部份,兩種各有特色則是視需求選用了。



 
















其它文章

arrow
arrow

    PG Levin Li 發表在 痞客邦 留言(0) 人氣()