sql - 从两个日期和时间之间的日期范围中选择数据

标签 sql date sql-server-2012 syntax-error

我有与此处记录的完全相同的问题
Select data from date range between two dates

但是当我使用给定的解决方案时,它对我不起作用。唯一的区别是我的表的一栏中有日期和时间。因此,我希望能够返回日期范围内的所有值

到目前为止,我有这个但没有用

SELECT * FROM aview 
WHERE startDate BETWEEN ('2017-11-25 11:27:00.000', '2018-11-25 11:27:00.000') OR 
leftdate BETWEEN ('2017-11-25 11:27:00.000', '2018-11-25 11:27:00.000') OR 
start_Date <= '2017-11-25 11:27:00.000' AND left_dept_date >= '2018-11-25 11:27:00.000'

最佳答案

我从未在SQL查询中将BETWEEN(from,to)视为一种模式-当它无法正常工作时,您就使它看起来像类似于SUBSTRING(column, index)的函数调用。尝试这个:

SELECT * FROM aview 
WHERE 
  startDate BETWEEN CONVERT(datetime, '2017-11-25 11:27:00.000', 121) AND CONVERT(datetime, '2018-11-25 11:27:00.000', 121) OR 
  leftdate BETWEEN CONVERT(datetime, '2017-11-25 11:27:00.000', 121) AND CONVERT(datetime, '2018-11-25 11:27:00.000', 121) OR 
  start_Date <= CONVERT(datetime, '2017-11-25 11:27:00.000', 121) AND left_dept_date >= CONVERT(datetime, '2018-11-25 11:27:00.000', 121)

当列是正确的日期时,此查询没有语法错误(请参见http://sqlfiddle.com/#!6/9eecb7db59d16c80417c72d1e1f4fbf1/16114),因此剩下的唯一是 View 代码中的缺陷,对数据进行了转换(例如,如果您的 View 正在转换字符串“12”/31/2017”转换为日期,但就好像是“dd/mm/yyyy”一样,或者将年份中有错别字的“2107-12-31”转换为一个不包含日期的smalldatetime类型支持2079年以后的年份

参见https://docs.microsoft.com/en-us/sql/t-sql/language-elements/between-transact-sql

关于sql - 从两个日期和时间之间的日期范围中选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47812532/

相关文章:

sql - 减少 CTE 表中的记录数

sql - 如何在 Firebird select 语句中创建从 1 到 100 的范围?

mysql查询在列表中最后一个特定标记之后获取行

c# - LINQ where 子句中的多个条件

iOS时间更改通知和以前的时间

sql-server - 同步两个或多个 SQL Server 2012 数据库

sql - 一周的开始(星期一) - 查询给出的日期不正确

mysql - SQL文件夹实体去重流程

ios - 在不使用 coredata 的情况下按日期对 UITableView 进行分组

sql-server-2012 - PHP 5.5和MSSQL驱动程序: Installing ODBC Driver 11 in Windows Server 2012 R2