我想在两个日期之间选择表格中的所有记录。我有一个查询:
SELECT * FROM <table> WHERE (thedate BETWEEN DATE('2012-04-01') AND DATE('2012-06-30'))
这适用于HSQL,Oracle,PostgreSQL,但由于缺少Date函数,它在SQL Server中不起作用。有没有办法让这个通常适用于所有数据库(包括SQL Server),或者我是否需要使用像Hibernate这样的ORM(我知道我应该这样做,但我特别要问这是否可以在SQL中完成)? / p>
答案 0 :(得分:1)
据我所知,没有必要使用日期(...)。这个例子似乎有用
DECLARE @TheDate Date = '2012-07-01';
SELECT 'hello' WHERE (@TheDate BETWEEN '2012-04-01' AND '2012-06-30')
--None returned
SET @TheDate = '2012-05-01'
SELECT 'hello' WHERE (@TheDate BETWEEN '2012-04-01' AND '2012-06-30')
--selects hello
修改 Btw值得用This Question查看日期时间答案(此处仅发布以节省工作量)
between语句可能会导致日期范围边界出现问题
BETWEEN '01/01/2009' AND '01/31/2009'
实际上被解释为
BETWEEN '01/01/2009 00:00:00' AND '01/31/2009 00:00:00'
因此将错过1月31日当天发生的任何事情。在这种情况下,您将不得不使用:
myDate >= '01/01/2009 00:00:00' AND myDate < '02/01/2009 00:00:00' --CORRECT!
或
BETWEEN '01/01/2009 00:00:00' AND '01/31/2009 23:59:59' --WRONG! (see update!)
更新:完全有可能在当天的最后一秒创建记录,日期时间晚于01/01/2009 23:59:59.997 !!
出于这个原因,不建议使用BETWEEN (firstday) AND (lastday 23:59:59)
方法。
改为使用myDate >= (firstday) AND myDate < (Lastday+1)
方法。
答案 1 :(得分:0)
在sql-server中我想你可能想看一下
DATEADD ( datepart , number, date )
DATEDIFF ( datepart , startdate , enddate )
但我认为你正在寻找
CAST ( expression AS data_type )
或
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
用法:
Select * from myTable where thedateToCompare >= CONVERT ( datetime , "dd/mm/yy hh:mi:ss:mmmAM" ) and thedateToCompare <= CONVERT ( datetime , "dd/mm/yy hh:mi:ss:mmmAM" )
可能会改变您的方法的是天气源'thedate'列类型datetime,smalldatetime还是存储在定义为字符串的列中?
您可以查看a link!对于可以用于字符串变体的日期时间常量的更多信息。