如果逗号然后获取子串,否则返回整个字符串

时间:2015-05-19 13:37:12

标签: mysql sql pdo substring

我如何提取SUNSTRING IF 存在commas,或者如果没有找到commas则返回整个字符串?

例如:

640 => 640
310,321,450 => 310
1024,5,78, 900 => 1024

我正在考虑做这样的事情:(假设这个字符串位于一个名为author_ids的表格行中)

[...]
WHERE SUBSTR(a.author_ids, 0, INSTR(a.author_ids, ',')) = b.author_id
OR a.author_ids = b.author_id
[...]

但这显然不起作用。

感谢。

其他信息:

约有10%的" author_ids"该作者有多个作者,因此a.author_ids = b.author_id可以正常工作,但如果有多位作者,则会""null

2 个答案:

答案 0 :(得分:4)

以下是两种方法:

select substring_index(val, ',', 1)

select val + 0

第一个在第一个逗号之前获取所有内容。第二个将字符串转换为数字。

将忽略包含第一个非数字字符(例如',')之后的所有字符。

您似乎将数字列表存储在逗号分隔的字符串中。这是一个坏主意。你应该考虑使用联结表,而不是将数字存储为字符串并列在字符串而不是

答案 1 :(得分:1)

SELECT CASE 
       WHEN author_ids LIKE '%,%'
       THEN SUBSTRING_INDEX(author_ids, ',', 1)
       ELSE author_ids
       END AS author_ids
FROM yourtable

SQL FIDDLE:http://sqlfiddle.com/#!9/fca0e/3/0