2014-03-14 64 views
0

请建议如何从列中获取特定字符串而不使用类似查询。例如 。Mysql包含字符串以获得列中的特定字符串

表名通知
coulumn1: notificationid
列2: notification_to_id

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

如何从notification_to_id列单独只得到25串

+4

多个值......这就是错误的正常化!每列应标准化,只包含一个值! – NoobEditor

+0

@ shalini,你的意思是你想得到最大值? – codelover

+0

不,不是最大值我需要找到特定的字符串@codelover – Thaya

回答

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

所以查询通过使用SUBSTRING_INDEX通过的SELECT 1UNION给予value.v,这将是在此情况下为1至最大5的任何地方(选择在CSV字段中的每个元件... SELECT 5)。如果它只有csv字段中的3个元素,当value.v是4或5时,它将返回空字符串''having将返回以25为单位的行。

如果notification_to_id包含超过5个元素,只需添加更多UNION,如SELECT 6等等,直到该列中元素的最大数量。

另一种方法是使用REGEX像下面(但你有25多OCCURENCES更换

SELECT notificationid, 
     '25' as value 
FROM notification 
WHERE notification_to_id REGEXP '(^25$)|(^25,)|(,25$)|(,25,)' 

sqlfiddle

如果25是唯一的元素(上面的查询将匹配^ $ 25 )^标记字符串的开始$标记字符串的结尾或者如果25是第一项(^ 25,)或者如果25是最后一项(25 $)或者如果25在中间的某个位置(,25)

或者如果你想使用LIKE你使用在单个列下面的

SELECT notificationid, 
     '25' as value 
FROM notification 
WHERE notification_to_id LIKE '25' 
    OR notification_to_id LIKE '25,%' 
    OR notification_to_id LIKE '%,25' 
    OR notification_to_id LIKE '%,25,%' 

sqlFiddle

+0

mmmmm ....小心解释这个'sql'发生了什么......看起来火箭科学给我! :) – NoobEditor

+0

是的......我是对的......它肯定是火箭科学! :D – NoobEditor

+0

不是这不是它只是解决不太正常的数据 –

相关问题