我试图将一个表连接到另一个表上。这里的技巧是表中的列包含一个长字符串。类似于:
PageNumber-190-ChapterTitle-HelloThere
PageNumber-19-ChapterTitle-NotToday
我有另一个表,其中包含页码列表以及是否要保留这些页,例如:
| 页码|保留标志|
| - -|- -|
| 一百九十|Y型|
| 十九|不|
我希望能够返回一个包含长字符串的查询,但前提是页码存在于字符串中的某个位置。问题是,当使用LIKE语句进行连接时:
JOIN t2 ON t1.string LIKE '%' + t2.page_number + '%' WHERE keep_flag = 'Y'
无论出于何种原因,它仍然会返回两个结果。结果查询中第19页的“保留标志”列将更改为“Y”,即使它不应出现在结果中。
我显然不认为LIKE是最好的加入方式,因为“19”就像“190”。我还能做什么呢?
2条答案
按热度按时间edqdpe6u1#
请尝试以下解决方案。
它正在对完全匹配项执行
JOIN
操作。查询语句
输出
| 识别码|标记|识别码|页码(_N)|保留标志(_L)|
| - -|- -|- -|- -|- -|
| 一个|页码-190-章节标题-您好此处|一个|一百九十|Y型|
6ojccjat2#
如果Page_number是一个数字,则必须将其归类为varchar,以便类型匹配。
你可以在f1 x的主页上读到,关于转换和转换的信息,请参阅https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver16。
第一个
| 串|
| - -|
| 页码-190-章节标题-您好此处|
fiddle