【问题标题】:parsing comma seperated values in MS-SQL (no csv or such)解析 MYSQL 中的逗号分隔值(到 csv 等)
【发布时间】:2010-12-20 11:34:24
【问题描述】:

我使用一个使用 MS-SQL 数据库的闭源商业应用程序。出于各种目的,我经常需要自己查询这个数据库。这意味着表和数据库设计是固定的,我对此无能为力。我只需要忍受它。现在我有两张表,布局如下(抽象,不要诋毁软件/数据库设计者)

t1: ID (int), att1(varchar), att2(varchar), .... attx(varchar)

t2: ID (int), t1_ids(varchar)

现在t1_ids 的内容是(颤抖)一个逗号分隔的 t1 id 列表。 (例如 12、456、43、675、54)。我想要做的是(你猜对了)加入这两个表。

对我来说幸运的是,这些表非常小,我根本不关心复杂性方面的性能(据我所知可能是O(n^m))。

理想情况下,我想创建一个连接这两个表的视图。我对插入或更新没有任何要求,只对选择语句。什么是最简单和最清晰(就可维护性而言)的方法?

【问题讨论】:

标签: sql-server string join


【解决方案1】:

要获得第一个和最后一个,也可以使用:

select * 
from t1 
    join t2 on '%,' + t1.ID + ',%' like ',' + T2.t1_ids + ','

T2.t1_ids 以 . 开头还是结尾都没有关系。有效值用逗号括起来。

【讨论】:

  • 与 Jani 相同的注释,这不适用于第一项和最后一项,因为它们两边都没有逗号
  • @Martijn Gotcha。修复了我的代码。我过去确实使用过这种模式。
【解决方案2】:

编辑:在发布此答案后,我意识到 PARSENAME 函数只能返回已解析字符串的一部分,因此我认为它在您的情况下没有用。

搜索 SO 寻找替代解决方案我遇到了一个有趣的答案:Split String in SQL

如果您可以向数据库添加触发器,那么您可以调用INSERTUPDATEDELETE 上的拆分字符串,以维护另一个表,并将ID 分隔为行。然后您可以使用该表创建您的视图。

我知道您说过您不介意查询速度,但至少这样您就不会在每次查询数据时解析所有字符串。

【讨论】:

    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    相关资源
    最近更新 更多