【发布时间】:2019-04-29 14:56:47
【问题描述】:
我有一个包含 2 列(代码、描述)的 CountryCodes 表,示例如下:
code description
AD Andorra
AE United Arab Emirates
AF Afghanistan
我在一个视图中有一个名为 Markets 的列,其中包含如下字符串:
Markets (this is one column)
AD | AE | AF
US | UK
NZ | AU | AD
我需要编写一个 select 语句,该语句将从分隔符 (|) 之间的 CountryCodes 表中的 Market 列中查找代码。例如:
AD | AE | AF ----> Andorra | United Arab Emirates | Afghanistan
US | UK ----> United States | United Kingdom
我知道这可以通过将 select 包装在大量替换语句中来附加,但我在此表中有 249 个代码,编写和维护似乎非常低效。
我还研究了 string_split 函数,但我的 SQL 服务器版本不支持它:Microsoft SQL Azure (RTM) - 12.0.2000.8
有人有什么建议吗?
【问题讨论】:
-
使用分隔符存储值是非常糟糕的数据库设计。
-
将它们存储为数组(而不是将每个元素存储在另一个表中它们自己的行中)只有在以后不需要加入元素时才好(想想描述查找)。其中的例子是标签数据。但是,SQL Server 不支持数组,并且没有专门的语法/功能来过滤分隔字符串,过滤器性能可能很糟糕。所以,是的,将每个国家市场关联存储在自己的行中shon.github.io/2015/12/21/postgres_array_performance.html
-
@MichaelBuen 没错,SQL Server 不支持数组类型,但它确实包含对可用于存储数组的 XML 和 JSON 的内置支持。话虽如此,如果不对 xml/json 数据编写详细的检查约束,就不可能确保数据实际上是正确的。规范化的结构(每个数组元素的行)更容易防止无效数据,并且更容易使用。 (话虽如此,我对PostgreSQL一无所知,我只是在谈论SQL Server)。
标签: sql sql-server tsql split azure-sql-database