请建议如何从列中获取特定字符串而不使用类似查询。例如 。Mysql包含字符串以获得列中的特定字符串
表名通知
coulumn1: notificationid
列2: notification_to_id
notificationid notification_to_id
1 25,23
2 15,16,25
如何从notification_to_id
列单独只得到25串
请建议如何从列中获取特定字符串而不使用类似查询。例如 。Mysql包含字符串以获得列中的特定字符串
表名通知
coulumn1: notificationid
列2: notification_to_id
notificationid notification_to_id
1 25,23
2 15,16,25
如何从notification_to_id
列单独只得到25串
试试这个
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'
所以查询通过使用SUBSTRING_INDEX
通过的SELECT 1
的UNION
给予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,)'
如果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,%'
mmmmm ....小心解释这个'sql'发生了什么......看起来火箭科学给我! :) – NoobEditor
是的......我是对的......它肯定是火箭科学! :D – NoobEditor
不是这不是它只是解决不太正常的数据 –
多个值......这就是错误的正常化!每列应标准化,只包含一个值! – NoobEditor
@ shalini,你的意思是你想得到最大值? – codelover
不,不是最大值我需要找到特定的字符串@codelover – Thaya