我有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*
有没有办法将这两个表与Filename
和File_frmt
匹配?
如果filename
包含file_frmt
,则匹配其他不匹配。
答案 0 :(得分:0)
使用INNER JOIN
和LIKE
的简单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
顺便说一句,如果您的file_Frmt
还包含?
作为单个字符的占位符(例如Microsoft搜索模式),则可以将其替换为_
。