SQL 服务器:根据 select 语句中的不同条件转换列
SQL Server : convert column by different condition in select statement
我有一个包含字符串地址的 table。我想 select 特定格式的列文本。但是,该列包含不同的格式并且需要不同的规则。例如,如果该列包含像 'SHOP' 这样的词,它将 select 措辞 开始 和 'SHOP'。
如果该列包含 'BOX' 之类的词,它将 select 之后 'BOX'.
的措辞
Table一个
| columna | address |
+---------+------------------+
| a1234 | ddsa SHOP LG123 |
| 4322 | SADA BOX 12-42 |
| 4632 | 123123 ADV 2313 |
我想要这样的东西:select 根据同一列中不同规则的不同条件。
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 |
您需要使用 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
我有一个包含字符串地址的 table。我想 select 特定格式的列文本。但是,该列包含不同的格式并且需要不同的规则。例如,如果该列包含像 'SHOP' 这样的词,它将 select 措辞 开始 和 'SHOP'。 如果该列包含 'BOX' 之类的词,它将 select 之后 'BOX'.
的措辞Table一个
| columna | address |
+---------+------------------+
| a1234 | ddsa SHOP LG123 |
| 4322 | SADA BOX 12-42 |
| 4632 | 123123 ADV 2313 |
我想要这样的东西:select 根据同一列中不同规则的不同条件。
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 |
您需要使用 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