字符串字符数的统计之chart_length()、length()的区别

语法

char_length(string)

注意:

  • char_length()  统计的是 字符串中字符的个数
  • length()  统计的是字符串的字节数

教大家一个判断方法 是否同时包含  中文 、英文。

如果是中文与英文混合,则   char_length() <> length()  

栗子

对过长的昵称截取处理_牛客题霸_牛客网 (nowcoder.com)

描述

现有用户信息表user_info(uid用户ID,nick_name昵称, achievement成就值, level等级, job职业方向, register_time注册时间):

iduidnick_nameachievementleveljobregister_time
11001牛客1190算法2020-01-01 10:00:00
21002牛客2号12003算法2020-01-01 10:00:00
31003牛客3号♂220算法2020-01-01 10:00:00
41004牛客4号250算法2020-01-01 11:00:00
51005牛客5678901234号40007算法2020-01-11 10:00:00
61006牛客67890123456789号250算法2020-01-02 11:00:00

有的用户的昵称特别长,在一些展示场景会导致样式混乱,因此需要将特别长的昵称转换一下再输出,请输出字符数大于10的用户信息,对于字符数大于13的用户输出前10个字符然后加上三个点号:『...』。

由示例数据结果输出如下:

uidnick_name
1005牛客5678901234号
1006牛客67890123...


解释:字符数大于10的用户有1005和1006,长度分别为13、17;因此需要对1006的昵称截断输出。

建表语句:

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');

题解:

select uid,
      if(char_length(nick_name)>13,concat(substr(nick_name,1,10),'...'),nick_name) as nick_name
from user_info
where char_length(nick_name) >10;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕.晨风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值