请建议如何在不使用类似查询的情况下从列中获取特定字符串。 例。
notificationid
notification_to_id
示例数据:
notificationid notification_to_id
---------------------------------------
1 25,23
2 15,16,25
如何从notification_to_id
列中仅获得25个字符串?
答案 0 :(得分:2)
尝试这个
SELECT notificationid,
SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(notification_to_id,','),',',value.v),',',-1) as to_id
FROM notification,(SELECT 1 as v UNION
SELECT 2 UNION
SELECT 3 UNION
SELECT 4 UNION
SELECT 5)value
HAVING to_id = '25'
因此,查询选择csv字段中的每个元素,使用带有SUBSTRING_INDEX
的{{1}},在这种情况下,该值将介于1到最大5之间(由{{1}给出} value.v
... UNION
)。如果它在csv字段中只有3个元素,那么当SELECT 1
为4或5时,它将返回空字符串SELECT 5
。并且value.v
将返回以25为元素的行。
如果''
包含的元素数超过5个,则只需添加having
notification_to_id
,例如UNION
等,直至该列中的最大元素数。
另一种方法是使用下面的SELECT 6
(但你有很多次出现25来取代
REGEX
如果25是唯一的元素(^ 25 $),则上述查询将匹配^标记字符串的开头$标记字符串的结尾。或者如果25是第一个项目(^ 25,)或者如果25是最后一个项目(,25 $)或者如果25是中间的某个项目(,25,)
或者,如果您想使用SELECT notificationid,
'25' as value
FROM notification
WHERE notification_to_id REGEXP '(^25$)|(^25,)|(,25$)|(,25,)'
,请使用以下
LIKE