SQL154. 对过长的昵称截取处理
描述
现有用户信息表user_info(uid用户ID,nick_name昵称, achievement成就值, level等级, job职业方向, register_time注册时间):id | uid | nick_name | achievement | level | job | register_time |
1 | 1001 | 牛客1 | 19 | 0 | 算法 | 2020-01-01 10:00:00 |
2 | 1002 | 牛客2号 | 1200 | 3 | 算法 | 2020-01-01 10:00:00 |
3 | 1003 | 牛客3号♂ | 22 | 0 | 算法 | 2020-01-01 10:00:00 |
4 | 1004 | 牛客4号 | 25 | 0 | 算法 | 2020-01-01 11:00:00 |
5 | 1005 | 牛客5678901234号 | 4000 | 7 | 算法 | 2020-01-11 10:00:00 |
6 | 1006 | 牛客67890123456789号 | 25 | 0 | 算法 | 2020-01-02 11:00:00 |
有的用户的昵称特别长,在一些展示场景会导致样式混乱,因此需要将特别长的昵称转换一下再输出,请输出字符数大于10的用户信息,对于字符数大于13的用户输出前10个字符然后加上三个点号:『...』。
uid | nick_name |
1005 | 牛客5678901234号 |
1006 | 牛客67890123... |
示例1
输入:
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 '用户等级', job varchar(32) COMMENT '职业方向', register_time datetime COMMENT '注册时间' )CHARACTER SET utf8 COLLATE utf8_general_ci; INSERT INTO user_info(uid,`nick_name`,achievement,`level`,job,register_time) VALUES (1001, '牛客1', 19, 0, '算法', '2020-01-01 10:00:00'), (1002, '牛客2号', 1200, 3, '算法', '2020-01-01 10:00:00'), (1003, '牛客3号♂', 22, 0, '算法', '2020-01-01 10:00:00'), (1004, '牛客4号', 25, 0, '算法', '2020-01-01 11:00:00'), (1005, '牛客5678901234号', 4000, 7, '算法', '2020-01-01 10:00:00'), (1006, '牛客67890123456789号', 25, 0, '算法', '2020-01-02 11:00:00');
输出:
1005|牛客5678901234号 1006|牛客67890123...
Mysql 解法, 执行用时: 36ms, 内存消耗: 6400KB, 提交时间: 2022-02-08
SELECT uid, IF( CHAR_LENGTH(nick_name) > 13, CONCAT(LEFT(nick_name, 10), "..."), nick_name ) nick_name FROM user_info WHERE CHAR_LENGTH(nick_name) > 10
Mysql 解法, 执行用时: 36ms, 内存消耗: 6424KB, 提交时间: 2021-12-14
select uid, case when CHAR_LENGTH(nick_name) > 13 then concat(substr(nick_name,1,10),'...') else nick_name end as nick_name from user_info where CHAR_LENGTH(nick_name) > 10
Mysql 解法, 执行用时: 36ms, 内存消耗: 6488KB, 提交时间: 2021-12-20
select uid, case when CHAR_LENGTH(nick_name)<=13 then nick_name else concat(substr(nick_name,1,10),'','...') end as nick_name from user_info where CHAR_LENGTH(nick_name)>10
Mysql 解法, 执行用时: 36ms, 内存消耗: 6500KB, 提交时间: 2021-11-30
select uid, case when CHARACTER_LENGTH(nick_name)>13 then concat(substring(nick_name,1,10),'...') else nick_name end nick_name from user_info where CHARACTER_LENGTH(nick_name)>10
Mysql 解法, 执行用时: 37ms, 内存消耗: 6372KB, 提交时间: 2021-12-01
select uid, (case when char_length(nick_name)>13 then concat(substr(nick_name,1,10),'...') else nick_name end) nick_name from user_info where char_length(nick_name)>10