Mysql包含用于获取列中特定字符串的字符串

时间:2014-03-14 05:19:01

标签: mysql

请建议如何在不使用类似查询的情况下从列中获取特定字符串。 例。

  • 表名:通知
  • 第1栏:notificationid
  • 第2栏:notification_to_id

示例数据:

notificationid       notification_to_id
---------------------------------------
  1                        25,23   
  2                        15,16,25

如何从notification_to_id列中仅获得25个字符串?

1 个答案:

答案 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'

sqlFiddle

因此,查询选择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

sqlfiddle

如果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

sqlFiddle