Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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关键字而不是一个值?_Sql_Sql Server_Sql Like - Fatal编程技术网

SQL:如何在列上使用LIKE关键字而不是一个值?

SQL:如何在列上使用LIKE关键字而不是一个值?,sql,sql-server,sql-like,Sql,Sql Server,Sql Like,以下是我尝试的两个查询,但都没有得到我想要的结果: SELECT H.Type, H.SN, R.Type, R.SN FROM Hours H INNER JOIN Repair R ON H.SN = R.SN AND H.Type LIKE '%' + R.Type 及 如何对列使用LIKE关键字而不是一个值?也就是说,我想把H型=424连接到R型=424A 编辑: 以下是我在进行建议调整后得到的一些示例结果: -----------------------------------

以下是我尝试的两个查询,但都没有得到我想要的结果:

SELECT H.Type, H.SN, R.Type, R.SN  
FROM Hours H 
INNER JOIN Repair R
ON H.SN = R.SN AND H.Type LIKE '%' + R.Type

如何对列使用
LIKE
关键字而不是一个值?也就是说,我想把H型=424连接到R型=424A

编辑:

以下是我在进行建议调整后得到的一些示例结果:

---------------------------------------
H.Type    |H.SN    |R.Type   |R.SN    |
---------------------------------------
R99       |270     |EMPTY    |270     |    
R99       |270     |EMPTY    |270     |     
R99       |270     |EMPTY    |270     |     
R99       |270     |EMPTY    |270     |
B134      |427     |EMPTY    |427     |
B134      |427     |EMPTY    |427     |
B134      |427     |EMPTY    |427     |
B134      |427     |EMPTY    |427     |

不应该有空字段。为什么会有?

您的第一个查询是正确的,只是您转换了需要通配符的值,然后只添加了另一个百分比符号

AND R.Type LIKE '%' + H.Type + '%'
%
是通配符,因此它与
A424
匹配,但与
424A
不匹配

两侧带有百分比符号,它将与
A424A
以及
424A


每个百分比符号都有一个性能命中率,因此,如果您的要求像您所说的那样具体,那么您只需要在
H.Type

的右侧显示百分比,您的第一个查询是正确的,除非您转换了需要通配符的值,然后只需添加另一个百分比符号

AND R.Type LIKE '%' + H.Type + '%'
%
是通配符,因此它与
A424
匹配,但与
424A
不匹配

两侧带有百分比符号,它将与
A424A
以及
424A


每个百分比符号都有一个性能命中率,因此,如果您的要求像您所说的那样具体,那么您只需要在
H.Type

的右侧输入百分比,您就是在反向进行比较。你想要:

and R.Type like H.Type + '%'
这将匹配:

  • R.type=
    424A
  • H.type=
    424
如果
H.Type
是数字,则首先将其强制转换为:

and R.Type like cast(H.type as varchar(255)) + '%'

你是在反向比较。你想要:

and R.Type like H.Type + '%'
这将匹配:

  • R.type=
    424A
  • H.type=
    424
如果
H.Type
是数字,则首先将其强制转换为:

and R.Type like cast(H.type as varchar(255)) + '%'

你想要多个部分匹配:
'%'+R.Type+'%
这将把
H.Type
匹配到任何包含
R.Type
的字符串。你想要多个部分匹配:
'%'+R.Type+'%
这将把
H.Type
匹配到任何包含
R.Type
的字符串。我同意这一点……但是为什么我仍然是空的呢
R.Type的字段
?我同意这一点……但是为什么我仍然得到
R.Type的空字段
?进行了调整,但是我仍然收到R.Type的空字段。这是为什么。它不应该是空的,对吗?如果
H.Type
是空的,那么它们将匹配。我有H.Type不为空和R.Type为空的查询结果。你确定条件是:
R.Type像H.Type+'%'
,左侧是
R.Type
,右侧是
H.Type
。那是错误的表达。使用正确的。进行了调整,但是我仍然收到R.Type的空字段。这是为什么。它不应该是空的,对吗?如果
H.Type
是空的,那么它们将匹配。我有H.Type不为空和R.Type为空的查询结果。你确定条件是:
R.Type像H.Type+'%'
,左侧是
R.Type
,右侧是
H.Type
。那是错误的表达。使用正确的。