如何使用like或compare获取字符串的结果集

时间:2015-04-09 10:48:58

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

使用SQL Server 2008

Table 1 varchar(100)

Values1 (Always one row)

123ABC456

Table2 varchar(200)

Values2 (Mulitple Rows)

123ABC456
123ABC456INV1
123ABC456_JULY
JULY123ABC456
0123ABC456
99123ABC456
JULY 123ABC456 INV 1
123JULYABC456
123_ABC456

我想从value2中选择精确的value1匹配,并且从value1匹配前9个字符的value2。以下供您参考

123ABC456 - Exact Match
123ABC456INV1 - First 9 Character Matched
123ABC456_JULY - First 9 Character Matched
JULY123ABC456 - No Match
0123ABC456 - No Match
99123ABC456 - No Match
JULY 123ABC456 INV 1 - No Match
123JULYABC456 - No Match
123_ABC456 - No Match

一样查询

从表格2中选择*,其中值为'%table1值%'

预期产出

123ABC456
123ABC456INV1
123ABC456_JULY

请建议并支持查询

7 个答案:

答案 0 :(得分:1)

试试这个

SELECT t2.Values2 
FROM Table2 t2
INNER JOIN Table1 t1 ON (t2.Values2 LIKE t1.Values1 + '%')

它不关心Values1的长度,这是一件好事。

答案 1 :(得分:0)

SELECT t2.Values2
FROM Table2 t2
INNER JOIN Table1 t1 
   ON LEFT(t2.Values2,9) = t1.Values1

答案 2 :(得分:0)

试试这个.......

select DISTINCT Table2.Value
from   Table1
join   Table2
    on Table1.value = left(Table2.value,9)

答案 3 :(得分:0)

您可以使用 LEFT 功能。

  

返回具有指定数量的字符串的左侧部分   字符。

SELECT Table2.Values2 
FROM Table2
JOIN Table1 
ON LEFT(Table2.Values2, 9) = Table1.Values1

答案 4 :(得分:0)

您可以使用SUBSTR

SELECT 
    * 
FROM 
    table1 t1 
JOIN table2 t2 ON SUBSTR(t1.values,1,9) = SUBSTR(t2.values,1,9)

编辑:SUBSTR与数据库引擎无关 - 因此,比LEFT更便携。

答案 5 :(得分:0)

您需要先声明匹配字符串,并且您需要相同的前缀,因此您应该使用='value%'

DECLARE @match NVARCHAR(255)
SELECT @match= (select * from @Table1) + '%';
Select * from @Table2 where value like @match

答案 6 :(得分:0)

这也是有效的:

SELECT * FROM Table2 WHERE Value2 LIKE (SELECT Value1 FROM Table1) + '%'