【问题标题】:If commas then get substring, else return whole string如果逗号则获取子字符串,否则返回整个字符串
【发布时间】:2015-07-31 09:06:32
【问题描述】:

如果没有找到commas,我将如何提取SUNSTRING 如果,或者如果没有找到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

【问题讨论】:

  • SELECT SUBSTRING_INDEX(my_column',',',1) FROM my_table; 现在看规范化。
  • 我亲爱的学生们,这就是为什么每个人都在谈论规范化数据库的原因。
  • google又坏了吗?

标签: mysql sql pdo substring


【解决方案1】:

这里有两种方法:

select substring_index(val, ',', 1)

select val + 0

第一个获取第一个逗号之前的所有内容。第二个将字符串转换为数字。忽略第一个非数字字符(例如“,”)之后和包括在内的所有字符。

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

【讨论】:

  • 是的,选项二是狡猾的。我试试看。
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 2020-04-14
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    相关资源
    最近更新 更多