通过 SELECT Query 在 WHERE 中进行多个 AND SQL 服务器 2012

Posted

技术标签:

【中文标题】通过 SELECT Query 在 WHERE 中进行多个 AND SQL 服务器 2012【英文标题】:Multiple AND in WHERE via SELECT Query | SQL SERVER 2012 【发布时间】:2019-11-29 23:15:50 【问题描述】:

我知道 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

【问题讨论】:

虽然ANDed 的术语数量可能存在限制,但 5 远不及该限制。问题在于您的数据以及您如何解释/期望它。请在您的问题中添加示例数据。 @TimBiegeleisen 在编辑中添加了示例数据。查询的其余部分没问题,只有CHECKTIME 部分,因为我需要将数据与当前时间戳进行比较(渗出时间)。我只需要将2015-07-27 与当前时间戳进行比较。 (YYYY-MM-DD) 样本数据并没有真正的帮助。我们想到的是两个表的样本数据,以及预期的输出。样本数据值一千字。 您当前的WHERE 子句虽然笨拙,但实际上应该已经在比较年、月和日。所以问题可能出在其他地方。 抱歉,伙计们,这纯粹是我的愚蠢,我正在比较我的测试数据中的当前日期(2019 年 6 月),显然不会显示 2019 年 7 月 22 日的记录数据来自 2019 年 6 月 20 日。 【参考方案1】:

您可以尝试将两个 datetimes(checktimesysdatetime())单独转换为日期 - 这会截断它们的时间部分

... AND CONVERT(DATE, CHECKINOUT.CHECKTIME) = CONVERT(DATE, SYSDATETIME())

... AND CAST(CHECKINOUT.CHECKTIME AS DATE) = CAST(SYSDATETIME() AS DATE) 

【讨论】:

谢谢你,这比我之前的查询更干净。也为这件事道歉,这纯粹是我的愚蠢,我正在比较我的测试数据中的当前日期(2019 年 6 月),显然不会显示 2019 年 7 月 22 日的记录,因为数据来自 20 年 6 月/2019.【参考方案2】:

可以用它来比较日期(111 = YYYY/MM/DD)吗?

WHERE
   CHECKINOUT.userid=physicianmasterfile.fingerscanno AND
   CONVERT(TIME(0), CHECKINOUT.CHECKTIME, 111) = CONVERT(TIME(0), SYSTDATEIME(), 111) AND
   CHECKINOUT.CHECKTYPE='I'

【讨论】:

抱歉,伙计们,这纯粹是我的愚蠢,我正在比较我的测试数据中的当前日期(2019 年 6 月),显然不会显示 2019 年 7 月 22 日的记录数据来自 2019 年 6 月 20 日。

以上是关于通过 SELECT Query 在 WHERE 中进行多个 AND SQL 服务器 2012的主要内容,如果未能解决你的问题,请参考以下文章

JPA @Query ERROR. token : WHERE

Wrong number of parameters: expected 0, was given 1 Query: select count(*) from product where pname

@Query的SELECT子句中的参数?

pandas使用query函数查询指定日期索引之前对应的dataframe数据行(select rows where date index before a certain date)

thinkphp-query

如何正确分组 Laravel Query Builder 中的 where 子句