Sql server 为什么查询在使用日期筛选器时返回一行,而它不应该';T
我有一个查询,它试图根据日期过滤信息,但不太有效 使用此查询:Sql server 为什么查询在使用日期筛选器时返回一行,而它不应该';T,sql-server,Sql Server,我有一个查询,它试图根据日期过滤信息,但不太有效 使用此查询: select CONVERT(VARCHAR, r.ondate, 111) from WS_ACTIVITY r SELECT r.* FROM [dbo].[WS_ACTIVITY] r WHERE r.request_type = 2 OR r.request_type = 7 OR r.request_type = 51 AND (CONVERT(VARCHAR, r.ondate, 111) BETWEEN '20
select CONVERT(VARCHAR, r.ondate, 111)
from WS_ACTIVITY r
SELECT r.*
FROM [dbo].[WS_ACTIVITY] r
WHERE r.request_type = 2 OR r.request_type = 7 OR r.request_type = 51 AND
(CONVERT(VARCHAR, r.ondate, 111)
BETWEEN '2017/10/18' AND '2017/10/18') ORDER BY r.user_id
我得到这个结果:
------------------------------
2017/03/16
但在运行此查询时:
select CONVERT(VARCHAR, r.ondate, 111)
from WS_ACTIVITY r
SELECT r.*
FROM [dbo].[WS_ACTIVITY] r
WHERE r.request_type = 2 OR r.request_type = 7 OR r.request_type = 51 AND
(CONVERT(VARCHAR, r.ondate, 111)
BETWEEN '2017/10/18' AND '2017/10/18') ORDER BY r.user_id
我得到以下结果:
id egn_bul request_xml response_xml user_id user_name user_department_id user_department_name request_id request_type is_from_cashe ondate ondate_response
----------- -------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- ---------------------------------------------------------------------------------------------------- ------------------ ---------------------------------------------------------------------------------------------------- ----------- ------------ ------------- ----------------------- -----------------------
7 8903304365 NULL NULL NULL NULL NULL NULL 7 1 2017-03-16 00:00:00.000 NULL
当我不应该的时候,我错过了什么?试试这个
(r.request_type = 2 OR r.request_type = 7 OR r.request_type = 51)
AND (CONVERT(VARCHAR, r.ondate, 111) BETWEEN '2017/10/18' AND '2017/10/18')
所以这两个子句都应该是true才能返回结果。这与
(r.request_type = 2 OR r.request_type = 7 OR r.request_type = 51)
AND (CONVERT(VARCHAR, r.ondate, 111) BETWEEN '2017/10/18' AND '2017/10/18')
因此,这两个子句都应该为true才能返回结果。这与有关,代码应该如下所示:
SELECT r.*
FROM [dbo].[WS_ACTIVITY] r
WHERE (r.request_type = 2 OR r.request_type = 7 OR r.request_type = 51 ) AND (CONVERT(VARCHAR, r.ondate, 111) BETWEEN '2017/10/18' AND '2017/10/18') ORDER BY r.user_id
在代码发布条件中,
r.request_type=7
为真,因此您的数据没有差异,因为您的条件之间有或,代码应如下所示:
SELECT r.*
FROM [dbo].[WS_ACTIVITY] r
WHERE (r.request_type = 2 OR r.request_type = 7 OR r.request_type = 51 ) AND (CONVERT(VARCHAR, r.ondate, 111) BETWEEN '2017/10/18' AND '2017/10/18') ORDER BY r.user_id
在代码发布的条件中,r.request_type=7
为真,因此您的数据没有差异,因为您的条件之间有或
,有一个附加的“and”,但这是有效的。非常感谢。还有一个额外的“和”,但这起作用了。非常感谢。