0

有没有办法检查逗号分隔值列中的正则表达式?

我有一个名为 storeId 的列,其值为 EMP_0345,00345,OPS,我只需要获取其中没有字母数字字符的 storeid。

我可以使用正则表达式 REGEXP '^[0-9]+$' 获取有效的 store_ids,但是如何获取逗号分隔值列中的值?

4

2 回答 2

0

您违反了数据库设计的教条:如果您需要单独访问它们,则永远不要在单个字段中存储多个值

即使您设法解决这个问题,您也会遇到大量的性能问题。解决这个问题的正确方法是将 CSV 列的内容移动到连接表的行中,然后简单地匹配该连接表的单个值。

于 2015-02-03T20:45:01.400 回答
0

您的数据库设计存在缺陷 - 鉴于您当前的要求。
您是否应该(尝试)将该列转换为当前(或不同)表中的几列,或者更确切地说转换为不同表中的行,主要取决于该列的数据中是否存在某种结构。
有了一些固有的结构,你可以使用类似的东西

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

如果需要调整/进一步详细信息,请发表评论,或更新您的请求以提供更详细的输入。

于 2015-02-03T23:26:58.813 回答