匹配逗号分隔后的数值,使用 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_REPLACE
和 FIND_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
我将字段列值存储为:
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_REPLACE
和 FIND_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
.