WHERE 中的多个 AND 通过 SELECT 查询 | SQL 服务器 2012

我知道 AND 子句有限制,我想知道为什么这个查询不起作用?


SELECT

physicianmasterfile.idno,

physicianmasterfile.lastname,

physicianmasterfile.firstname,

physicianmasterfile.middlename,

physicianmasterfile.fingerscanno,

YEAR(CHECKINOUT.CHECKTIME) AS Year,

MONTH(CHECKINOUT.CHECKTIME) AS Month,

CONVERT(TIME(0),CHECKINOUT.CHECKTIME) AS Time


FROM 

physicianmasterfile,

CHECKINOUT 


WHERE  

CHECKINOUT.userid=physicianmasterfile.fingerscanno AND

MONTH(CHECKINOUT.CHECKTIME) = MONTH(SYSDATETIME()) AND /* yields result in month(int) */

DAY(CHECKINOUT.CHECKTIME) = DAY(SYSDATETIME()) AND /* yields result in day(int) */

YEAR(CHECKINOUT.CHECKTIME) = YEAR(SYSDATETIME()) AND/* yields result in month(int) */

CHECKINOUT.CHECKTYPE='I'

当我尝试删除其中一个时AND,查询运行没有问题,但是当有 5 个AND查询时,它在执行时不会产生任何结果。


有没有其他方法可以做到这一点而不会遇到错误?


我正在尝试获取SYSDATETIME()它的值,它会产生 YYYY-MM-DD HH:MM:SS:MS 的值2019-07-22 09:25:31.9557058。有没有办法只获取月份、日期和年份,并将时间分开?我要比较的数据是这样的2015-07-27 08:00:01.000,查询应该只显示2019-07-22.


编辑:示例数据


CHECKTIME : 2015-07-27 08:00:01.000


哆啦的时光机
浏览 144回答 2
2回答

catspeake

您可以尝试将两个datetimes ( checktimeand sysdatetime()) 单独转换为日期 - 这会截断它们的时间部分... AND CONVERT(DATE, CHECKINOUT.CHECKTIME) = CONVERT(DATE, SYSDATETIME())或者... AND CAST(CHECKINOUT.CHECKTIME AS DATE) = CAST(SYSDATETIME() AS DATE)
打开App,查看更多内容
随时随地看视频慕课网APP