匹配逗号分隔后的数值,使用 MYSQL/MariaDB & REGEXP_SUBSTR 通过下划线值连接

Match Numeric value after comma separated, concatenated by underscore values using MYSQL/MariaDB & REGEXP_SUBSTR

我将字段列值存储为:

texta_123,textb_456

我的SQL:

SELECT * 
FROM mytable 
WHERE 456 = REGEXP_SUBSTR(mytable.concatenated_csv_values, 'textb_(?<number>[0-9]+)')

注意:我知道有多种方法可以做到这一点,但为了示例的目的,我大大简化了我的查询;我需要工作的部分是 REGEXP_SUBSTR()

实际上,我想:“查询结果,其中 id 等于在具有逗号分隔值的列中下划线后提取的数值”

当我test my Regex时,它似乎工作正常。

然而,在 MySQL 中(从技术上讲,我使用的是 MariaDB 10.4.19),当我 运行 查询时,我收到警告:“警告:#1292 T运行计算出不正确的整数 value:textb_456"

您应该认真考虑修复您的数据库设计,以便不像这样存储未规范化的 CSV 数据。作为临时解决方法,我们可以使用 REGEXP_REPLACEFIND_IN_SET:

SELECT *
FROM mytable
WHERE FIND_IN_SET(
          '456',
          REGEXP_REPLACE(concatenated_csv_values, '^.*_', '')) > 0;

此处使用的正则表达式技巧会将 texta_123,textb_456 的 CSV 输入转换为 123,456。然后,我们可以使用 FIND_IN_SET.

轻松搜索给定的 ID