有没有办法检查逗号分隔值列中的正则表达式?
我有一个名为 storeId 的列,其值为 EMP_0345,00345,OPS,我只需要获取其中没有字母数字字符的 storeid。
我可以使用正则表达式 REGEXP '^[0-9]+$' 获取有效的 store_ids,但是如何获取逗号分隔值列中的值?
有没有办法检查逗号分隔值列中的正则表达式?
我有一个名为 storeId 的列,其值为 EMP_0345,00345,OPS,我只需要获取其中没有字母数字字符的 storeid。
我可以使用正则表达式 REGEXP '^[0-9]+$' 获取有效的 store_ids,但是如何获取逗号分隔值列中的值?
您违反了数据库设计的教条:如果您需要单独访问它们,则永远不要在单个字段中存储多个值
即使您设法解决这个问题,您也会遇到大量的性能问题。解决这个问题的正确方法是将 CSV 列的内容移动到连接表的行中,然后简单地匹配该连接表的单个值。
您的数据库设计存在缺陷 - 鉴于您当前的要求。
您是否应该(尝试)将该列转换为当前(或不同)表中的几列,或者更确切地说转换为不同表中的行,主要取决于该列的数据中是否存在某种结构。
有了一些固有的结构,你可以使用类似的东西
SELECT
storeId
, SUBSTRING_INDEX(storeId, ',', 1) AS some_column
, SUBSTRING_INDEX(SUBSTRING_INDEX(storeId, ',', 2), ',', -1) AS store_id
, SUBSTRING_INDEX(storeId, ',', -1) AS another_column
FROM T
WHERE storeId REGEXP '^[^,]+,[0-9]+,[^,]+$'
;
分隔值(并可能填充新添加的列)。该WHERE
子句将允许区分具有特定列中值排列的行集。
请参阅实际操作/更多详细信息:SQLFiddle。
如果需要调整/进一步详细信息,请发表评论,或更新您的请求以提供更详细的输入。