簡體   English   中英

SQL按select語句中的不同條件轉換列

[英]SQL convert column by different condition in select statement

我有一個包含字符串地址的表。 我想選擇特定格式的列文本。 但是,該列包含不同的格式,並且需要不同的規則。 例如,如果該列包含諸如“SHOP”之類的詞,它將選擇以“SHOP”開頭的詞。 如果該列包含像“BOX”這樣的詞,它會選擇“BOX”之后的詞。

tableA 

__________________________
|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

所以決賽桌將是這樣。

tableA 

__________________________
|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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM