我的 SQL 查询有一个小问题。我正在使用 GETDATE 函数,但是,假设我在下午 5 点执行脚本,它将在 2011 年 12 月 12 日下午 5 点到 2011 年 12 月 18 日下午 5 点之间提取记录。我怎样才能让它拉起整个 12/12/2011 - 12/18/2011 基本上忽略时间的记录。
我的脚本:
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate > (GETDATE()-6)
我的 SQL 查询有一个小问题。我正在使用 GETDATE 函数,但是,假设我在下午 5 点执行脚本,它将在 2011 年 12 月 12 日下午 5 点到 2011 年 12 月 18 日下午 5 点之间提取记录。我怎样才能让它拉起整个 12/12/2011 - 12/18/2011 基本上忽略时间的记录。
我的脚本:
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate > (GETDATE()-6)
在 SQL Server 2008 及更高版本中,您可以将DateTime
转换为 a Date
,这将删除时间元素。
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate >= (cast(GETDATE()-6 as date))
在 SQL Server 2005 及更低版本中,您可以使用:
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate >= DateAdd(Day, Datediff(Day,0, GetDate() -6), 0)
这是我发现的最简单的东西
-- Midnight floor of current date
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()))
DATEDIFF 返回 1900-1-1 之前或之后的整数天数,并且 Convert Datetime 强制将其返回到午夜的那个日期。
由于 DateDiff 返回一个整数,您可以使用加法或减法来获得正确的偏移量。
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()) + @dayOffset)
这不是四舍五入,而是截断……但我认为这就是所要求的。(四舍五入加一并截断......这也不是四舍五入,即天花板,但很可能是你想要的。真正四舍五入加 0.5(这行得通吗?)并截断。
事实证明,您可以将 .5 添加到 GetDate() 并按预期工作。
-- Round Current time to midnight today or midnight tomorrow
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE() + .5))
我在 SQL Server 2008 上进行了所有试验,但我认为这些功能也适用于 2005。
--
-- SQL DATEDIFF getting midnight time parts
--
SELECT GETDATE() AS Now,
Convert(DateTime, DATEDIFF(DAY, 0, GETDATE())) AS MidnightToday,
Convert(DateTime, DATEDIFF(DAY, -1, GETDATE())) AS MidnightNextDay,
Convert(DateTime, DATEDIFF(DAY, 1, GETDATE())) AS MidnightYesterDay
go
Now MidnightToday MidnightNextDay MidnightYesterDay
-------------------- --------------------- --------------------- ---------------------
8/27/2014 4:30:22 PM 8/27/2014 12:00:00 AM 8/28/2014 12:00:00 AM 8/26/2014 12:00:00 AM
SELECT getdate()
结果:2012-12-14 16:03:33.360
SELECT convert(datetime,convert(bigint, getdate()))
结果 2012-12-15 00:00:00.000
您可以将日期时间转换为日期,然后再转换回日期时间。这将重置时间戳。
选择 getdate() --2020-05-05 13:53:35.863 选择演员(演员(GETDATE()作为日期)作为日期时间)--2020-05-05 00:00:00.000
正如@BassamMehanni 提到的,您可以在 SQL Server 2008 及更高版本中转换为 DATE ...
SELECT
*
FROM
yourTable
WHERE
dateField >= CAST(GetDate() - 6 AS DATE)
AND dateField < CAST(GetDate() + 1 AS DATE)
第二个条件实际上可以是 just GetDate()
,但我将这种格式作为示例显示,Less Than DateX
以避免将 dateField 也转换为 DATE,从而大大提高性能。
如果你在 2005 年或以下,你可以使用这个...
SELECT
*
FROM
yourTable
WHERE
dateField >= DATEADD(DAY, DATEDIFF(DAY, 0, GetDate()) - 6, 0)
AND dateField < DATEADD(DAY, DATEDIFF(DAY, 0, GetDate()) + 1, 0)
Try using this.
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate >= CONVERT(DATE, GETDATE())
这可能看起来很便宜,但它对我有用
SELECT CONVERT(DATETIME,LEFT(CONVERT(VARCHAR,@dateFieldOrVariable,101),10)+'00:00:00.000')
我通常会
SELECT *
FROM MyTable
WHERE CONVERT(VARCHAR, MyTable.dateField, 101) = CONVERT(VARCHAR, GETDATE(), 101)
如果您使用的是 SQL SERVER 2008,则可以
SELECT *
FROM MyTable
WHERE CAST(MyTable.dateField AS DATE) = CAST(GETDATE() AS DATE)
希望这可以帮助
你可以把时间四舍五入。
在下面使用ROUND
会将其舍入到午夜。
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate > CONVERT(datetime, (ROUND(convert(float, getdate()-6.5),0)))