【问题标题】:SQL Concatenation QuerySQL 连接查询
【发布时间】:2015-04-14 00:44:13
【问题描述】:

我有一个名为I_Tags 的列,我试图将它与另一个表Asset_Tags 进行比较。

I_Tags 具有类似

的字段
PV-B02-0115
B04-PV-7126B--
B05-PV0841A--
B05-PV-0841B--
B09-PV-1155A--

Asset_Tags 有类似的字段

PV-B04-6888
PV-B05-0841A--
PV-B05-1219
PV-B09-1155A--

我不确定如何根据以下场景编写案例陈述:

  1. 如果I_Tag 中的前两个字符是字母PV,则匹配整个字符串以匹配Asset_Tags
  2. 如果不是,并且 PV 是 I_Tag 中的第 4 和第 5 个字符,请将它们移动到第 1 和第 2 个字符位置并删除末尾的任何/所有短划线 (-) 并与 Asset_Tags 匹配。

我从未在 SQL 中编写过 case 语句,所以我不确定如何为此编写查询。

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 你可以发布输出
  • 你试过了吗?
  • 我没有尝试过 case 语句,因为我不知道从哪里开始(尽管我尝试将 PV 放在一列中,B05 等放在另一列中,最后 4-6 个字符在另一列中,然后全部基于资产但这需要很长时间,因为数据集不止几列)输出是:PV-B05-0841A 和 PV-B09-1155A

标签: sql sql-server database sql-server-2008


【解决方案1】:

也许这会有所帮助,如果返回结果以便 PV 始终位于开头并删除尾随 -s:

select
  case 
    when I_Tags like 'PV%' then I_Tags
    when I_Tags like '____PV%' then
      'PV-'+left(I_Tags, 3) + 
      substring(I_Tags, 7, len(I_Tags) -5 -patindex('%[^-]%', reverse(I_Tags)))
    end as test
from
  table1

您可以在 SQL Fiddle 中对其进行测试:http://sqlfiddle.com/#!6/526db/16

不确定您的 B05-PV0841A-- 示例中是否有错字,但它没有 -。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2023-03-29
    • 2021-12-25
    • 2016-02-03
    相关资源
    最近更新 更多