【问题标题】:How to split column value and check value is present using sql where query?如何使用 sql where 查询拆分列值和检查值是否存在?
【发布时间】:2016-03-16 04:01:55
【问题描述】:

我需要检查列中的一个值是否有分号分隔的值,但我不想使用类似查询来代替是否有任何拆分选项并检查列值

我的桌子是这样的

ID      Values
1    RCI Argentine;Brazil;RCM Poland
2    Brazil;Germany
3    Australia; Poland
4    RCM Poland;Germany
5    RCI Argentine;Brazil;Germany;Italy

我的要求我需要检查此表中是否存在值'Poland',当我使用类似查询时它会拉出此输出

ID      Values
1    RCI Argentine;Brazil;RCM Poland
3    Australia; Poland
4    RCM Poland;Germany

但我的实际输出应该是

ID      Values
3    Australia; Poland

如果我的值是 'RCM Poland' 它应该是

ID      Values
1    RCI Argentine;Brazil;RCM Poland
4    RCM Poland;Germany

还有其他选项可以拆分和检查列吗?

【问题讨论】:

  • 你使用的是哪个RDBMS
  • 最好的选择是重新设计你的数据库
  • @MotoGP sql server 2008
  • ';' + values + ';' like '%;RCM Poland;%'

标签: sql sql-server-2008 split


【解决方案1】:

首先,您不应在违反First Normal form 的列中存储多个值。

使用分隔符存储多个值会使数据解析变得非常困难,就像您的情况一样。所以考虑改变你的数据库设计。

要使用当前表结构回答您的问题,您需要一个拆分字符串函数(不推荐)

SELECT [ID],
       [Values]
FROM   yourtable
       CROSS apply (SELECT *
                    FROM   Splitstrings([values], ';')) cs
WHERE  cs.SPLIT_VAL = ' Poland' 

这是一篇关于拆分字符串函数的文章Split strings the right way – or the next best way

【讨论】:

  • 我正面临无效的对象名称'Splitstrings'。
  • 当然你需要从我提供的链接中创建一个拆分字符串函数
【解决方案2】:

您可以像这样存储该字段:;Australia;Poland; 以及像 '%;Poland;%' 这样的值 如果你不喜欢这个,就使用 MotoGP 的解决方案 :v

【讨论】:

    【解决方案3】:

    你应该试试这个:

    select * from yourtbl where ';'+[values]+';' like '%;yourval;%'
    

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      相关资源
      最近更新 更多