【问题标题】:How to get length of an array in MySQL column?如何获取 MySQL 列中数组的长度?
【发布时间】:2021-06-22 16:04:44
【问题描述】:

我在 Temp 列中有一个数组,我正在尝试查找数组的长度。 我试过JSON_LENGTH,但它不起作用。

到目前为止,我尝试过这个

SELECT JSON_LENGTH(Temp)from tbl_name;

得到了这个

Id  Temp
1   ['53682', '66890', '53925', '54847']
2   ['53682', '66890', '53925', '54843','54890']

预期输出:

Id  Temp                                             Count
1   ['53682', '66890', '53925', '54847']             4
2   ['53682', '66890', '53925', '54843','54890']     5

【问题讨论】:

  • “不工作”是什么意思?它会给出错误吗?如果是这样,错误是什么?您使用的是没有 JSON 函数的旧版 MySQL 吗?
  • 顺便说一句,这不是有效的 JSON(在有效 JSON 中需要双引号的情况下使用单引号)。我怀疑你没有使用 JSON 数据类型,这会拒绝你上面显示的数据。
  • @BillKarwin 我试过 SELECT JSON_LENGTH(Chance)from table_name;我的所有行都为空。
  • @BillKarwin 我使用的是 8.0.23 版本,我有 JSON 函数。
  • 我使用 MySQL 8.0.23 对其进行了测试,如果您使用双引号而不是单引号,它就可以工作。

标签: mysql arrays mysql-json


【解决方案1】:

你有两种可能

  1. 旧时尚方式
  2. 将 ' 替换为 '
CREATE TABLE table1 (
  `Id` INTEGER,
  `Temp` VARCHAR(44)
);

INSERT INTO table1
  (`Id`, `Temp`)
VALUES
  ('1', "['53682', '66890', '53925', '54847']"),
  ('2', "['53682', '66890', '53925', '54843','54890']");
seLECT `Id`, `Temp`, CHAR_LENGTH (`Temp`) - CHAR_LENGTH (REPLACE(`Temp`,',','')) + 1  as cnt FROM table1
身份证 |温度 | cnt -: | :-------------------------------------------- | --: 1 | ['53682', '66890', '53925', '54847'] | 4 2 | ['53682', '66890', '53925', '54843','54890'] | 5
CREATE TABLE table2 (
  `Id` INTEGER,
  `Temp` VARCHAR(44)
);

INSERT INTO table2
  (`Id`, `Temp`)
VALUES
  ('1', '["53682", "66890", "53925", "54847"]'),
  ('2', '["53682", "66890", "53925", "54843","54890"]');
SELECT `Id`, `Temp`, JSON_LENGTH(`Temp`) AS cnt FROM table2
身份证 |温度 | cnt -: | :-------------------------------------------- | --: 1 | [“53682”、“66890”、“53925”、“54847”] | 4 2 | [“53682”、“66890”、“53925”、“54843”、“54890”] | 5

db小提琴here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多