LIKE子句在SQL Server中不起作用

时间:2011-04-05 21:37:25

标签: sql sql-server sql-server-2005 sql-like

我有一个表在SQL Server 2005中有以下列:

DocID   NSN  QTY
-----------------
DHA12    32    5
DSRB23   22   45
TF22     70   23

每当我执行以下查询以获取所有具有以DSRB或DHA开头的DocId的NSN时,它都会给我空集:

SELECT  DocId, NSN, Qty, RequestDate, ReceiveDate
  FROM  Orders 
 WHERE (DocID LIKE '%DSRB%') 
   AND (DocID LIKE '%DHA%')  

我猜有两个LIKE子句的问题,因为当我删除最后一个LIKE子句时,查询工作正常。

8 个答案:

答案 0 :(得分:7)

您的结果为空,因为表格中没有DocID类似 %DSRB% %DHA%同时。您没有在问题中说,但我猜您希望收到包含DocIds DHA12DSRB23的两行。

为此,您需要选择DocID类似于 %DSRB% %DHA%的行。尝试将AND子句中的WHERE更改为OR

SELECT DocId, NSN, Qty, RequestDate, ReceiveDate
FROM Orders
WHERE (DocID LIKE '%DSRB%') OR (DocID LIKE '%DHA%')

如果您需要更多示例,请参阅此introduction to SQL Logical Operators

答案 1 :(得分:5)

如果要查找包含 XX YY的行,则需要使用 OR

SELECT DocId, NSN, Qty, RequestDate, ReceiveDate 
FROM Orders 
WHERE (DocID LIKE '%DSRB%')
   OR (DocID LIKE '%DHA%')

答案 2 :(得分:3)

你不想在那里OR而不是AND吗?

答案 3 :(得分:1)

表中没有包含字符串“DSRB”并且包含字符串“DHA”的行。

答案 4 :(得分:1)

将其设为“OR”而不是“AND”。在这一点上,你说“WHERE”中的两个条款必须是真的。

答案 5 :(得分:1)

你确定你需要和吗?您没有显示满足这些要求的记录。我想你可能想要OR,它应该返回两个记录。

答案 6 :(得分:0)

此:

SELECT DocId, NSN, Qty, RequestDate, ReceiveDate
FROM Orders
WHERE (DocID LIKE '%DSRB%') AND (DocID LIKE '%DHA%')

只会匹配“DSRB DHA”

之类的内容

你的意思是:

SELECT DocId, NSN, Qty, RequestDate, ReceiveDate
FROM Orders
WHERE (DocID LIKE '%DSRB%') OR (DocID LIKE '%DHA%')

或者这个:

SELECT DocId, NSN, Qty, RequestDate, ReceiveDate
FROM Orders
WHERE (DocID LIKE '%DSRB%')
UNION
SELECT DocId, NSN, Qty, RequestDate, ReceiveDate
FROM Orders
WHERE (DocID LIKE '%DHA%')

答案 7 :(得分:0)

你的夹心LIKE是一个桌面扫描,所以另一种表现同样糟糕(或更差)的选择

SELECT DocId, NSN, Qty, RequestDate, ReceiveDate
FROM Orders
WHERE REPLACE(REPLACE(DocID, 'DSRB', ''), 'DHA', '') != DocID