【发布时间】:2021-01-18 16:30:17
【问题描述】:
我正在尝试报告一些数据,其中一列需要包含逗号分隔的 2 字符代码列表,然后我需要将其“翻译”回它所代表的描述,例如假设这是关于人和他们的个性特征。数据是这样存储的:
| person_id | traits |
|---|---|
| 1 | OU,AD |
| 2 | AB,CD,EF,GH,IJ |
并说这些“代码”代表如下描述:
OU = Outgoing
AD = Adventurous
等等。所以对于 person_id = 1 我希望 Traits 的输出是:
Outgoing, Adventurous
有一组可以列出的代码列表,没有查找表来将代码与其描述相匹配,并且每条记录在traits 列中可以有不同数量的代码。
如上“翻译”此列的最佳方式是什么?
【问题讨论】:
-
修复你的数据模型!在字符串中存储逗号分隔的值是一种 SQL 反模式。
-
拆分字符串(在Stack Overflow 中有 1,000 个如何执行此操作的重复项),然后将
JOIN拆分到您的查找表中(还有很多骗子,还有文档和教程) .虽然 真正的 解决方案是修复您的设计并停止在 RDBMS 中存储分隔数据。 -
“修复数据/设计”正在向合唱团讲道 - 我无法控制这一点 - 不幸的是,如上所述,它无助于解决我的问题。
-
如果在 SQL 2016 或更高版本上存在 STRING_SPLIT 函数 docs.microsoft.com/en-us/sql/t-sql/functions/… - 如果没有,则 google Jeff Moden String Split 或点击此链接:sqlservercentral.com/articles/…
标签: sql sql-server split