【发布时间】:2020-04-07 02:48:21
【问题描述】:
您能否使用分隔符将VARCHAR 类型的数据库表列值拆分为多个值?
因此,在获取数据时,我想使用管道 | 作为分隔符来拆分像 text|another|other 这样的值。
我们使用的是存储过程和T-SQL,我对SQL有一些基本的了解,但我的理解是使用STRING_SPLIThttps://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver15应该是可以的。
谁能帮助我了解更多细节?
【问题讨论】:
-
没错。 STRING_SPLIT 可以使用
SELECT value FROM STRING_SPLIT('text|another|other', '|');解决这个问题,但仅适用于 SQL Server 2016+ -
你不应该首先存储这样的数据。仅仅因为有拆分功能并不意味着这是一个好主意。这样的字段是不可能索引的,这意味着搜索单个值需要扫描整个表
-
没有拆分功能可以解决这个问题 - 这是一个设计错误,而不是编码错误。另一方面,如果您不关心查询,最好更好在客户端拆分值并使用它们做任何你想做的事情
-
任何好的数据架构都知道在RDBMS中存储分隔数据是一个愚蠢的想法。首先,您没有机会实现外键,这意味着您无法维护数据完整性。这是一条你不想走的路。
-
在这种情况下,@codeepic 在将数据加载到您自己的数据库之前清理数据。在代码中拆分和处理值要容易得多。例如,您是否希望将这些值与 columns 或 rows 分开?如果是行,则必须重复所有其他字段。表格行不能嵌套。但是,在加载数据时,您可以以任何方式拆分、嵌套、提取数据,并将其存储在任何您想要的地方
标签: sql-server tsql