【发布时间】:2020-03-19 18:45:22
【问题描述】:
我有一个字符串,其中包含用逗号分隔的数字,如下所示。
15,22,20,26,33,445,40,44,22,225,115,2
我想知道15 是否在该字符串中。
问题是15 和115 都是匹配的。
相同对于其他数字,例如 2,对于这种情况,20、25 和 225 是匹配的。
对于这两种情况,只有在存在 15 或 2 时才应该返回字符串。
我尝试使用 like 关键字,但它不起作用。它还返回带有115 或20, 225, 222
同时分别匹配15 and 2 的行。
谁能建议regex 模式?
更新
我有一个类似下面的查询,我在其中使用 like 关键字,但由于上述原因,我得到了错误的结果。
SELECT DISTINCT A.id,A.title,A.title_hi,A.cId,B.id as cid1,A.report_type ,A.icon_img_url, A.created_at , A.news_date
FROM tfs_report_news A, tfs_commodity_master B
WHERE (',' + RTRIM(A.cId) + ',') LIKE ('%,' + B.id + ',%')
AND A.ccId = B.ccId AND A.`report_type`= "M"
AND A.isDeleted=0 AND A.isActive=1 AND B.isDeleted=0
AND B.status=1
AND A.news_date= (SELECT MAX(T.news_date)
FROM tfs_report_news T WHERE (',' + RTRIM(T.cId) + ',')
LIKE ('%,' + B.id + ',%'))
ORDER BY created_at desc, id desc limit 100;
这里tfs_report_news 有字符串15,22,20,26,33,445,40,44,22,225,115,2 作为列名cId 和个别cId 如15 或2 是id 的tfs_commodity_master
【问题讨论】:
-
修复你的数据模型!不要将数字存储为字符串!不要在一个字符串列中存储多个值!
-
我知道@GordonLinoff。这是架构中的设计缺陷,但我无法在那里进行任何更改。这是一个老应用程序,很多业务逻辑都依赖于这个表架构。
标签: mysql sql regex csv select