gpt4 book ai didi

Mysql:使用正则表达式匹配作为字段?

转载 作者:可可西里 更新时间:2023-11-01 08:06:15 25 4
gpt4 key购买 nike

我读了mysql documentation about regexp但看起来正则表达式 只能用作 WHERE 过滤器 以匹配 SELECT 查询中的行。

我想知道是否可以将正则表达式的匹配提取为列,例如,如果我的表中有一个 SKU 文本字段:

+----------------+--------------+---------------+
|sku | product_name | [other fields]|
+----------------+--------------+---------------+
|ART-2830--107-70| Foo | |
|ART-2832--115-6 | Bar | |
+----------------+--------------+---------------+

触发一个与正则表达式匹配的选择查询会很棒 (ART-)([0-9]+)(--)([0-9]+)(-)([0- 9]+) 输出:

+------+------------+-------+----------+
| type | collection | model | material |
+------+------------+-------+----------+
| ART | 2830 | 107 | 70 |
| ART | 2832 | 115 | 6 |
+------+------------+-------+----------+

请注意,type、collection、model 和 material 列没有出现在我的表中,它们只是上面正则表达式的匹配项。

这可能吗?

p.s:我知道为我需要的每个 属性 添加一列来规范化该表是一个好主意,但这是我必须使用的结构,我无法在此刻。

编辑 为了以防万一有人需要这个,我看到了 PostgreSql offer this function .

最佳答案

总的来说答案是否定的——至少在没有大量强力编码的情况下是这样。但是,你很幸运,因为你可以在 MySQL 中“轻松地”做你想做的事:

select substring_index(sku, '-', 1) as type,
reverse(substring_index(reverse(substring_index(sku, '-', 2)), '-', 1)) as collection,
reverse(substring_index(reverse(substring_index(sku, '-', 4)), '-', 1)) as model,
reverse(substring_index(reverse(substring_index(sku, '-', 5)), '-', 1)) as material
from skus

好吧,也许不是最明显的功能集合。但这是它对模型的作用:

开始于:ART-2830--107-70

substring_index(sku, '-', 4) --> ART-2830--107

reverse():

701--0381-TRA

外层 substring_index( . . . 1):

701

最后的reverse():

107

关于Mysql:使用正则表达式匹配作为字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17147470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com