簡體   English   中英

聯合或合並表以滿足 SQL Server 中的特定需求

[英]Union or merge tables to accommodate for specific needs in SQL Server

我有 3 個臨時表,它們為手機號碼創建了兩列; 例如,移動 1 具有所有國內和國際號碼,而移動 2 具有一些需要從++41轉換為0041的數字。

如何將這些數字合並到一列中,從而保留 mobile1 中的所有內容,除了少數更改的 ++ 數字

看起來像:

mobile 1         cust      mobile 2
-------------------------------------------
078998899       98743872
079445544       12342343   
+637976945247   41768999    00637976945247
+41405355893    98767856    0041405355893
+41412387946    43789347    0041412387946
+4113120464     85903479    000413120464

它應該是:

mobile final       cust    
----------------------------------
078998899          98743872
079445544          12342343   
00637976945247     41768999 
0041405355893      98767856 
0041412387946      43789347 
000413120464       85903479 

我在這里試過這個,但它對括號不滿意,我很樂意在這里提供一些幫助。 這是用於 SQL Server

SELECT * 
INTO #temp_UNION 
FROM
    (SELECT *
     FROM [#national_numbers] 
     UNION
     SELECT *
     FROM [#international_numbers] 
     UNION
     SELECT * 
     FROM [#plusplus_numbers]
     UNION) v

您可以在 CASE WHEN 和 LEFT、CHARINDEX、SUBSTRING 和 Like 的幫助下根據條件將兩列數據設置為一列。

我強烈建議使用 CHARINDEX 以獲得更好的性能, 以下是我們的 LIKE vs SUBSTRING vs LEFT/RIGHT vs CHARINDEX 速度測試的結果,以毫秒為單位。

create table #Test (mobile1 varchar(100),cust varchar(100),mobile2 varchar(100))

insert into #Test values('078998899','98743872',null)
insert into #Test values('079445544','12342343',null)
insert into #Test values('+637976945247','41768999','00637976945247')
insert into #Test values('+41405355893','98767856','0041405355893')
insert into #Test values('+41412387946','43789347','0041412387946')
insert into #Test values('+4113120464','85903479','000413120464')

使用字符索引:

SELECT CASE WHEN CHARINDEX ('+',mobile1)=1 THEN mobile2 ELSE mobile1 END As MobileNo, cust from #Test

暫無
暫無

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

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