处理MySQL表中以分号分隔的数据

时间:2017-03-03 14:53:01

标签: mysql

我有MySQL DB,其中一列中有多个数据,以分号分隔。我需要使用它们中的第一个。如何处理这种存储数据的最佳推荐方法是什么? (针对此特定问题以及一般如何使用分号分隔数据)。

2 个答案:

答案 0 :(得分:0)

使用

SELECT SUBSTRING_INDEX(column_name, ';', 1) from your_table

答案 1 :(得分:0)

问:“如何处理这种存储数据的最佳推荐方法是什么?”

答:最佳建议避免以逗号分隔列表存储数据。 (不,这不是意味着我们应该使用分号代替逗号作为列表中的分隔符。)

对于本主题的介绍性讨论,我建议对Bill Karwin的书中的第2章进行评论:“SQL AntiPatterns:避免数据库编程的陷阱”

这是方便的

https://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557

以及其他优秀书商。暂时搁置这个建议......

要从分号分隔列表中检索第一个元素,我们可以使用SUBSTRING_INDEX函数。

作为示范:

SELECT SUBSTRING_INDEX('abc;def;ghi',';',1)

返回

'abc'

此处记录了MySQL SUBSTRING_INDEX函数:https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring-index

我认识到这可能被视为“仅链接答案”。这个问题的一个很好的答案将会更长,举例说明存储逗号分隔列表的缺陷。

如果数据库只能将逗号分隔的列表视为一团数据,而不需要检查列表的内容,那么我会考虑存储它,类似于我们存储的方式.jpg图像在数据库中。

我会将.jpg图像存储和检索为BLOB,只是整个字节块。保存整个事情,并检索整个事情。我永远不会让数据库操纵图像的内容。我不会要求数据库检查图像以识别有关jpg图像中“内”的信息。我不会要求数据库从中获取任何有意义的信息......照片中有多少人,照片中的人物名称是什么,将人物添加到照片中等等。 / p>

如果我们打算将它作为一个对象,一个不透明的字节块,就像我们处理一个jpg图像一样,我只会宽恕存储逗号分隔(或分号分隔)的分隔列表。