我有一个表在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子句时,查询工作正常。
答案 0 :(得分:7)
您的结果为空,因为表格中没有DocID
类似 %DSRB%
和 %DHA%
同时。您没有在问题中说,但我猜您希望收到包含DocIds DHA12
和DSRB23
的两行。
为此,您需要选择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