如何在SQL Server中连接两个表?

时间:2017-07-18 04:27:02

标签: sql sql-server sql-server-2008

我有2张桌子。

表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,则匹配其他不匹配。

1 个答案:

答案 0 :(得分:0)

使用INNER JOINLIKE的简单REPLACE即可。

创建并填充样本表(在将来的问题中保存此步骤):

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搜索模式),则可以将其替换为_