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才能出現
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(),會比較安全,但也要看資料庫的編碼而定,而在字串切割部份,兩種各有特色則是視需求選用了。
其它文章
沒有留言:
張貼留言