Mysql計(jì)算字段長(zhǎng)度函數(shù)之CHAR_LENGTH函數(shù)
CHAR_LENGTH函數(shù)用于返回字符串的長(zhǎng)度,長(zhǎng)度單位為字符
不管漢字,數(shù)字或是字母都算是一個(gè)字符,包括中英文標(biāo)點(diǎn)符號(hào),空格也算是一個(gè)字符
語(yǔ)法結(jié)構(gòu)
CHAR_LENGTH(str)
str:計(jì)算長(zhǎng)度的字符串
示例
-- 4 SELECT CHAR_LENGTH('test'); -- 12 SELECT CHAR_LENGTH('Hello World!'); -- 2 SELECT CHAR_LENGTH('小胡'); -- 3 SELECT CHAR_LENGTH('123'); -- 4 SELECT CHAR_LENGTH(',,,,'); -- 2 SELECT CHAR_LENGTH(' '); -- 0 SELECT CHAR_LENGTH(''); -- Null SELECT CHAR_LENGTH(NULL);
案例:對(duì)過(guò)長(zhǎng)的昵稱進(jìn)行截取處理
導(dǎo)入數(shù)據(jù)
drop table if exists user_info; CREATE TABLE user_info ( id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID', uid int UNIQUE NOT NULL COMMENT '用戶ID', `nick_name` varchar(64) COMMENT '昵稱', achievement int COMMENT '成就值', level int COMMENT '用戶等級(jí)', job varchar(32) COMMENT '職業(yè)方向', register_time datetime COMMENT '注冊(cè)時(shí)間' )CHARACTER SET utf8 COLLATE utf8_general_ci; INSERT INTO user_info(uid,`nick_name`,achievement,`level`,job,register_time) VALUES (1001, '???', 19, 0, '算法', '2020-01-01 10:00:00'), (1002, '???號(hào)', 1200, 3, '算法', '2020-01-01 10:00:00'), (1003, '???號(hào)♂', 22, 0, '算法', '2020-01-01 10:00:00'), (1004, '???號(hào)', 25, 0, '算法', '2020-01-01 11:00:00'), (1005, '牛客5678901234號(hào)', 4000, 7, '算法', '2020-01-01 10:00:00'), (1006, '???7890123456789號(hào)', 25, 0, '算法', '2020-01-02 11:00:00');
user_info表(用戶信息表)
uid: 用戶ID nick_name: 昵稱 achievement: 成就值 level: 等級(jí) job: 職業(yè)方向
register_time: 注冊(cè)時(shí)間
問(wèn)題:
有的用戶的昵稱特別長(zhǎng),在一些展示場(chǎng)景會(huì)導(dǎo)致樣式混亂,因此需要將特別長(zhǎng)的昵稱轉(zhuǎn)換一下再輸出,請(qǐng)輸出字符數(shù)大于10的用戶信息,對(duì)于字符數(shù)大于13的用戶輸出前10個(gè)字符然后加上三個(gè)點(diǎn)號(hào): "..."
-- 解法1 SELECT uid, IF(CHAR_LENGTH(nick_name) > 13,CONCAT(LEFT(nick_name,10),'...'),nick_name)AS nick_name FROM user_info WHERE CHAR_LENGTH(nick_name) > 10; -- 解法2 SELECT uid, (CASE WHEN CHAR_LENGTH(nick_name) <= 13 THEN nick_name ELSE CONCAT(SUBSTRING(nick_name,1,10),'...') END)AS nick_name FROM user_info WHERE CHAR_LENGTH(nick_name) > 10;
結(jié)果展示:
解釋: 字符數(shù)大于10的用戶有1005和1006,長(zhǎng)度分別為13、17,因此需要對(duì)1006的昵稱截?cái)噍敵?nbsp;
附:CHAR_LENGTH()和LENGTH()的區(qū)別
無(wú)論是LENGTH()還是CHAR_LENGTH()都是為了統(tǒng)計(jì)字符串的長(zhǎng)度。只不過(guò),LENGTH()是按照字節(jié)來(lái)統(tǒng)計(jì)的,CHAR_LENGTH()是按照字符來(lái)統(tǒng)計(jì)的。例如:一個(gè)包含5個(gè)字符且每個(gè)字符占兩個(gè)字節(jié)(比如漢字)的字符串而言,LENGTH()返回長(zhǎng)度10,CHAR_LENGTH()返回長(zhǎng)度是5;如果對(duì)于單字節(jié)的字符,則兩者返回結(jié)果相同。
一、char_length('string')/char_length(column_name)
1、返回值為字符串string或者對(duì)應(yīng)字段長(zhǎng)度,長(zhǎng)度的單位為字符,一個(gè)多字節(jié)字符(例如,漢字)算作一個(gè)單字符;
2、不管漢字還是數(shù)字或者是字母都算是一個(gè)字符;
3、任何編碼下,多字節(jié)字符都算是一個(gè)字符;
二、length('string')/length(column_name)
1、utf8字符集編碼下,一個(gè)漢字是算三個(gè)字符,一個(gè)數(shù)字或字母算一個(gè)字符。
2、其他編碼下,一個(gè)漢字算兩個(gè)字符, 一個(gè)數(shù)字或字母算一個(gè)字符。
總結(jié)
到此這篇關(guān)于Mysql計(jì)算字段長(zhǎng)度函數(shù)之CHAR_LENGTH函數(shù)的文章就介紹到這了,更多相關(guān)Mysql CHAR_LENGTH函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
win2008 R2 WEB環(huán)境配置之MYSQL 5.6.22安裝版安裝配置方法
這篇文章主要介紹了win2008 R2 WEB環(huán)境配置之MYSQL 5.6.22安裝版安裝配置方法,需要的朋友可以參考下2016-06-06php mysql訪問(wèn)數(shù)據(jù)庫(kù)的步驟詳解
這篇文章主要介紹了php mysql訪問(wèn)數(shù)據(jù)庫(kù)的步驟詳解的相關(guān)資料,需要的朋友可以參考下2016-10-10強(qiáng)制修改mysql的root密碼的六種方法分享(mysql忘記密碼)
下面我們提供了6種不同的修改mysql root用戶的密碼,與增加mysql用戶的方法2011-11-11MySQL中查詢所有數(shù)據(jù)庫(kù)占用磁盤(pán)空間大小和單個(gè)庫(kù)中所有表的大小的sql語(yǔ)句
這篇文章主要介紹了在mysql中如何查詢所有數(shù)據(jù)庫(kù)占用磁盤(pán)空間大小的SQL語(yǔ)句,這樣方便我們了解數(shù)據(jù)庫(kù)的一些情況2013-08-08解決mysql連接超時(shí)和mysql連接錯(cuò)誤的問(wèn)題
這篇文章主要介紹了解決mysql連接超時(shí)和mysql連接錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Mysql使用全文索引(FullText?index)的實(shí)例代碼
使用索引時(shí)數(shù)據(jù)庫(kù)性能優(yōu)化的必備技能之一,下面這篇文章主要給大家介紹了關(guān)于Mysql使用全文索引(FullText?index)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04解決mysql創(chuàng)建數(shù)據(jù)庫(kù)后出現(xiàn):Access denied for user ''root''@''%'' to dat
這篇文章主要給大家介紹了如何解決mysql在創(chuàng)建數(shù)據(jù)庫(kù)后出現(xiàn):Access denied for user 'root'@'%' to database 'xxx'的錯(cuò)誤提示,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-05-05