Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server中选择两个日期_Sql_Sql Server_Datetime_Select_Between - Fatal编程技术网

如何在SQL Server中选择两个日期

如何在SQL Server中选择两个日期,sql,sql-server,datetime,select,between,Sql,Sql Server,Datetime,Select,Between,我需要使用两个日期的范围在表中给出select计数,但是我的日期是“yyyy MM dd”格式,当我执行select SQL时,它返回以下错误: 将varchar数据类型转换为datetime数据类型会导致值超出范围 以下是我正在使用的查询: SELECT COUNT(*) AS score FROM requests WHERE date_em BETWEEN '2019-04-01' AND '2019-04-30' 表结构 日期=日期时间 有人能帮我吗?我的首选方法是: SELE

我需要使用两个日期的范围在表中给出select计数,但是我的日期是“yyyy MM dd”格式,当我执行select SQL时,它返回以下错误:

将varchar数据类型转换为datetime数据类型会导致值超出范围

以下是我正在使用的查询:

SELECT COUNT(*) AS score 
FROM requests 
WHERE date_em BETWEEN '2019-04-01' AND '2019-04-30'
表结构

  • 日期=日期时间

有人能帮我吗?

我的首选方法是:

SELECT COUNT(*) AS score
FROM requests
WHERE date_em >= '2019-04-01' AND
      date_em < '2019-05-01'
在SQL Server中,这也将使用索引(如果可用)。但是,通常列上的函数都不允许使用索引,所以我对这种方法比较犹豫。

您尝试过这种方法吗

SELECT COUNT(*) AS score FROM requests WHERE date_em BETWEEN '2019-04-01 00:00' AND '2019-04-30 23:59'

添加00:00和23:59使其看起来像DateTime。

使用
20190401
20190430
作为日期常量(不带破折号),因为该格式已明确转换为DateTime。您的案例2非常完美!它在这里工作得很好。谢谢大家!@gordonlinoffs由于这是使用日期,您应该注意使用
介于之间的
@guilhermestich。如果您使用介于之间的,请务必查看执行计划以查看是否使用索引。(当然,如果日期列上有索引)。
SELECT COUNT(*) AS score FROM requests WHERE date_em BETWEEN '2019-04-01 00:00' AND '2019-04-30 23:59'