我有一个名为authors
的字段,它是一个存储作者ID的varchar(我知道错误地将ID保存为varchar !!)
我想在这个字段中搜索一个int,例如:
SELECT * FROM table WHERE 3 IN CONVERT(SUBSTRING_INDEX(`authorid`,',',-1),UNSIGNED INTEGER)
authorid
值是' 3,4,5'。
有可能吗,我该怎么做?
答案 0 :(得分:2)
答案 1 :(得分:1)
如果出现这个问题,PravinS的解决方案在短期内可能是最好的。
除非你只想证明一点,否则可以在SQL中拆分数字但不值得!例如,最多可处理100个逗号分隔值: -
SELECT a.*
FROM table a
CROSS JOIN
(SELECT 0 AS acnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
CROSS JOIN
(SELECT 0 AS acnt UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
WHERE LENGTH(authorid) - LENGTH(REPLACE(authorid, ',', '')) >= (tens.acnt * 10 + units.acnt)
AND SUBSTRING_INDEX(SUBSTRING_INDEX(authorid, ',', tens.acnt * 10 + units.acnt + 1), ',', -1) = 3