Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 两表模式匹配_Sql_Pattern Matching - Fatal编程技术网

Sql 两表模式匹配

Sql 两表模式匹配,sql,pattern-matching,Sql,Pattern Matching,我有两个包含文件列表的表:表1的第1列包含文件名,文件名以字符串“STO-”开头,后跟字符串模式。因此,字符串总共有16个字母数字字符(带破折号的字符串为20个字符)。 这类似于表2第1列中的相同文件名字符串。然而,问题是,在第一个表中,还有附加的文本和字符附加到20位字符串中。我正在尝试匹配这两个表中20位字符串匹配的结果,以及表中的其他信息。我在一个表中找到了大量关于模式匹配的信息,但没有比较两个表。希望我能解释自己,并提供一个例子来帮助: 表1.Column1包含文件名“STO-100-X

我有两个包含文件列表的表:表1的第1列包含文件名,文件名以字符串“STO-”开头,后跟字符串模式。因此,字符串总共有16个字母数字字符(带破折号的字符串为20个字符)。 这类似于表2第1列中的相同文件名字符串。然而,问题是,在第一个表中,还有附加的文本和字符附加到20位字符串中。我正在尝试匹配这两个表中20位字符串匹配的结果,以及表中的其他信息。我在一个表中找到了大量关于模式匹配的信息,但没有比较两个表。希望我能解释自己,并提供一个例子来帮助:

表1.Column1包含文件名“STO-100-XX-XXXX-XXXX_Text.pdf”

表2.Column2包含文件名“STO-100-XX-XXXX-XXXX.pdf”和表2.Column3='Y'

所以,我再次尝试查看表1中的文件列表,其中前20个字母数字字符串与表2中的匹配

SELECT * from TABLE1 t1
INNER JOIN TABLE2 t2
ON SUBSTRING(t1.Column1, 1, 20) = SUBSTRING(t2.Column2, 1, 20)
(在SQLServer2005上进行了测试,但我认为SUBSTRING是一个ANSI SQL函数,所以应该适用于大多数数据库)

另外,您的问题中有点不清楚,但是如果您还想限制基于第3列的结果,您可以这样做

SELECT * from TABLE1 t1
INNER JOIN TABLE2 t2
ON SUBSTRING(t1.Column1, 1, 20) = SUBSTRING(t2.Column2, 1, 20)
WHERE t2.Column3 = 'Y'

认真地我已经用了一天的时间来讨论这个问题,你在几分钟内就拿出了一个例子……我对它进行了测试,并返回了我想要的结果。谢谢你,内森!!你也回答了第二部分(尽管我在测试时已经把它钉上了)。我会接受并再次感谢你!