【问题标题】:SQL Server : convert column by different condition in select statementSQL Server:在选择语句中按不同条件转换列
【发布时间】:2021-12-27 04:29:10
【问题描述】:

我有一个包含字符串地址的表。我想以特定格式选择列文本。但是,该列包含不同的格式,并且需要不同的规则。例如,如果该列包含诸如“SHOP”之类的词,它将选择以“SHOP”开头的措辞start。 如果该列包含“BOX”之类的单词,它将选择after 'BOX'。

表 A

| columna | address          |
+---------+------------------+
| a1234   | ddsa SHOP LG123  |
| 4322    | SADA BOX 12-42   |
| 4632    | 123123 ADV  2313 |

我想要这样的东西:通过同一列中不同规则中的不同条件进行选择。

SELECT 
    ta.columna,
    if CHARINDEX('SHOP',ta.address) > 0
        RIGHT(ta.address, len(ta.address) - charindex('SHOP', ta.address)+1) AS unit_addr,
    if CHARINDEX('BOX',ta.address) > 0
        RIGHT(ta.address, len(ta.address) - charindex('BOX', ta.address)-8) AS unit_addr,
    if CHARINDEX('ADV',ta.address) > 0
        RIGHT(ta.address, charindex('ADV', ta.address)-3) AS unit_addr
FROM 
    tableA ta

所以输出应该是这样的:

| columna | address        |
+---------+----------------+
| a1234   | SHOP LG123     |
| 4322    | 12-42          |
| 4632    | 2313           |

【问题讨论】:

  • 提供 DDL+DML 让人们更容易提供帮助。
  • 你不能在查询中使用IF,你可以使用CASE
  • 没有提供的示例数据 - "LIGHTBOX" "SADA BOX" :) 并且您在该代码的最后一行有前导空格。
  • 发布您自己的答案并自行接受。

标签: sql sql-server tsql select charindex


【解决方案1】:

您需要使用 Case 表达式。假设上面的逻辑可以满足您的需要,这种事情应该以您想要的结构提供结果......

select ta.columna,
       case 
           when CHARINDEX('SHOP',ta.address) > 0 then
               RIGHT(ta.address, len(ta.address) - charindex('SHOP', ta.address)+1)
           when CHARINDEX('LIGHTBOX',ta.address) > 0 then
               RIGHT(ta.address, len(ta.address) - charindex('LIGHTBOX', ta.address)-8)
           when CHARINDEX('ADV',ta.address) > 0 then
               RIGHT(ta.address, charindex('ADV', ta.address)-3)
       end as address
from tablea ta

【讨论】:

    猜你喜欢
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多