Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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 如何使用like或compare获得字符串的结果集_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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

Sql 如何使用like或compare获得字符串的结果集,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,使用SQLServer2008 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 我想从val

使用SQLServer2008

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 values%”

预期产量

123ABC456
123ABC456INV1
123ABC456_JULY
请建议并支持此查询

尝试此查询

SELECT t2.Values2 
FROM Table2 t2
INNER JOIN Table1 t1 ON (t2.Values2 LIKE t1.Values1 + '%')
它不关心值1的长度,这是一件好事。

试试这个

SELECT t2.Values2
FROM Table2 t2
INNER JOIN Table1 t1 
   ON LEFT(t2.Values2,9) = t1.Values1
select DISTINCT Table2.Value
from   Table1
join   Table2
    on Table1.value = left(Table2.value,9)
您可以使用功能

返回字符串的左半部分,其中包含指定数量的字符 人物

您可以为此使用:

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

编辑:SUBSTR更不受数据库引擎的影响-因此,比左图更具可移植性。

您需要首先声明匹配字符串,因为您需要相同的前缀,所以应该使用='value%'

DECLARE @match NVARCHAR(255)
SELECT @match= (select * from @Table1) + '%';
Select * from @Table2 where value like @match
这也是有效的:

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

您如何知道值1的长度正好是9?正如OP所说:
我想从值2中选择精确的值1匹配,前9个字符的值2应该从值1中匹配。
好的,我的错,抱歉。
SELECT * FROM Table2 WHERE Value2 LIKE (SELECT Value1 FROM Table1) + '%'