SQL DateTime을 자정으로 반올림
SQL 쿼리에 작은 문제가 있습니다. GETDATE 함수를 사용하고 있지만 오후 5시에 스크립트를 실행한다고 가정하면 2011 년 12 월 12 일 오후 5 시부 터 2011 년 12 월 18 일 오후 5시 사이에 레코드를 가져옵니다. 어떻게하면 전체 2011 년 12 월 12 일부터 2011 년 12 월 18 일까지 전체에 대한 기록을 가져올 수 있지만 기본적으로 시간을 무시합니다.
내 스크립트 :
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate > (GETDATE()-6)
SQL Server 2008 이상에서는 DateTime
을으로 캐스트 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)
이것은 반올림이 아닙니다. 이것은 잘립니다. 그러나 나는 그것이 요구되는 것이라고 생각합니다. (반올림하려면 하나를 추가하고 자르십시오 ... 그리고 그것은 또한 반올림이 아닙니다. 그 천장도 마찬가지지만 다시 한 번 원하는 것입니다. 실제로 반올림하려면 .5를 더하고 (작동합니까?) 잘라냅니다.
GetDate ()에 .5를 추가 할 수 있으며 예상대로 작동합니다.
-- 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
@BassamMehanni가 언급했듯이 SQL Server 2008부터 DATE로 캐스팅 할 수 있습니다.
SELECT
*
FROM
yourTable
WHERE
dateField >= CAST(GetDate() - 6 AS DATE)
AND dateField < CAST(GetDate() + 1 AS DATE)
두 번째 조건은 실제로 그냥 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)
이것을 사용해보십시오.
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate >= CONVERT(DATE, GETDATE())
This might look cheap but it's working for me
SELECT CONVERT(DATETIME,LEFT(CONVERT(VARCHAR,@dateFieldOrVariable,101),10)+' 00:00:00.000')
I usually do
SELECT *
FROM MyTable
WHERE CONVERT(VARCHAR, MyTable.dateField, 101) = CONVERT(VARCHAR, GETDATE(), 101)
if you are using SQL SERVER 2008, you can do
SELECT *
FROM MyTable
WHERE CAST(MyTable.dateField AS DATE) = CAST(GETDATE() AS DATE)
Hope this helps
You could round down the time.
Using ROUND
below will round it down to midnight.
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate > CONVERT(datetime, (ROUND(convert(float, getdate()-6.5),0)))
참고URL : https://stackoverflow.com/questions/8555316/rounding-sql-datetime-to-midnight
'Program Club' 카테고리의 다른 글
Visual Studio Code에서 터미널을 어떻게 지울 수 있습니까? (0) | 2020.10.28 |
---|---|
MySQL 및 PHP-빈 문자열 대신 NULL 삽입 (0) | 2020.10.28 |
Rails에서 특정 http 상태 코드를 반환합니다. (0) | 2020.10.28 |
Python의 바이너리 파일에서 정수 읽기 (0) | 2020.10.28 |
throws 선언을 추가하지 않고 예외를 throw하는 방법이 있습니까? (0) | 2020.10.28 |