【发布时间】: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