2017-07-18 95 views
-3

我有2張桌子。如何在SQL Server中連接兩個表?

表1具有Filename柱,其包含這樣的值:

AV_SDBT_NonPay_SXM_PRE15_INV_20170712_results_20170716.txt 
data_20170715.dat.zip.pgp 
demo_20170715.dat.zip.pgp 
gm_SiriusXM_COI_Export_20170715000255.dat.gz.pgp 
gm_SiriusXM_COI_Export_20170716000247.dat.gz.pgp 
gm_unsubs_20170715.dat.gz.pgp 
IBS_Number_Skill_Assignment-en-us_2017-07-16T020008476Z.csv 
IGN_Action_Det_20170716.txt 

和表2具有File_Frmt列包含該數據:

gm_SiriusXM_COI_Export*.pgp 
Contest_Sweeps* 
fiddemo* 
IWCO_SXM_EST_IN_HOME*.gpg 
demo*.pgp 
IWCO_IWCO*Processed*.gpg 
*SDBT_NonPay* 

有一種方法來匹配這兩個FilenameFile_frmt

如果filename包含file_frmt,則匹配不匹配。

回答

0

一個簡單的INNER JOINLIKEREPLACE將做到這一點。

創建和填充示例表(保存我們這一步在你未來的問題):

DECLARE @T1 as TABLE 
(
    Filename nvarchar(100) 
) 

INSERT INTO @T1 VALUES 
('AV_SDBT_NonPay_SXM_PRE15_INV_20170712_results_20170716.txt'), 
('data_20170715.dat.zip.pgp'), 
('demo_20170715.dat.zip.pgp'), 
('gm_SiriusXM_COI_Export_20170715000255.dat.gz.pgp'), 
('gm_SiriusXM_COI_Export_20170716000247.dat.gz.pgp'), 
('gm_unsubs_20170715.dat.gz.pgp'), 
('IBS_Number_Skill_Assignment-en-us_2017-07-16T020008476Z.csv'), 
('IGN_Action_Det_20170716.txt') 


DECLARE @T2 as TABLE 
(
    File_Frmt nvarchar(100) 
) 
INSERT INTO @T2 VALUES 
('gm_SiriusXM_COI_Export*.pgp'), 
('Contest_Sweeps*'), 
('fiddemo*'), 
('IWCO_SXM_EST_IN_HOME*.gpg'), 
('demo*.pgp'), 
('IWCO_IWCO*Processed*.gpg'), 
('*SDBT_NonPay*') 

查詢:

SELECT t1.* 
FROM @T1 as t1 
INNER JOIN @T2 as t2 ON t1.FileName LIKE REPLACE(t2.File_Frmt, '*', '%') 

結果:

Filename 
gm_SiriusXM_COI_Export_20170715000255.dat.gz.pgp 
gm_SiriusXM_COI_Export_20170716000247.dat.gz.pgp 
demo_20170715.dat.zip.pgp 
AV_SDBT_NonPay_SXM_PRE15_INV_20170712_results_20170716.txt 

See a live demo on rextester.

順便說一句,如果您的file_Frmt也包含?作爲單個字符的佔位符(例如Microsoft搜索模式),則可以用_替換它。