MYSQL中的分隔符

| |
[不指定 2020/05/09 10:04 | by 吕进 ]
120x120
想像分隔符的运用场景:
1、某个人向购物车添加多个商品ID;
2、某个人在某个时段被多个人,多少次投票;
我们常在MYSQL用英文逗号或竖线等符号对字符串进行分隔,但执行find_in_set()函数时,该函数只认英文逗号。所以呢,MYSQL中,如果要用分隔符,建议首选英文逗号。

与分隔符相关的一些函数运用举例——
以下表结构供参考
引用
DROP TABLE IF EXISTS `boblog_appfw`;
CREATE TABLE `boblog_appfw`  (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `ip` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `activetime` int(16) NULL DEFAULT NULL,
  `bwid` varchar(168) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `ip`(`ip`, `activetime`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;
假设以上表boblog_appfw的bwid是用英文逗号进行分隔,字段内容:"index,325,329,400";
(1)用find_in_set()函数,找325首次出现的位置:
Select find_in_set('325',bwid) from boblog_appfw where id =1;
返回结果:2
(2)bwid字段中有多少个分隔符:
思路:总的字符数 - 把逗号替换成空的总字符数
select LENGTH(bwid)-LENGTH(REPLACE(bwid,',','')) FROM boblog_appfw;
返回结果:3
【如果要查询被分隔符 分隔的组数:+1】
(3)用substring_index函数查询分隔符前(或后)面多少组,正为前,负为后:
SELECT substring_index(bwid,',', 2) as ABCD FROM boblog_appfw;
返回结果:index,325
(4)还是用分隔符substring_index函数,辅助一个序号表将行转成列:
引用
SELECT t.id as AID,t.ip AS AIP,t.activetime AS ATM, substring_index(substring_index(t.bwid,',', b.bzid + 0), ',', -1) as Abw FROM boblog_appfw t join fzxh b ON b.bzid < (LENGTH(t.bwid)+1 - LENGTH(REPLACE(t.bwid, ',',''))+1);
如果需要添加条件,在后面跟个HAVING就可以。

  • 中查看更多 MYSQL中的分隔符 相关内容
  • 中查看更多 MYSQL中的分隔符 相关内容
  • 中查看更多 MYSQL中的分隔符 相关内容
  • 中查看更多 MYSQL中的分隔符 相关内容
  • 互联故事 » 码到功成 | 评论(0) | 引用(0) | 阅读(1518)

    表情
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    打开HTML
    打开UBB
    打开表情
    隐藏
    记住我
    昵称   密码   游客无需密码
    网址   电邮   [注册]