SQL 날짜를 자정으로 반올림
SQL 쿼리에 작은 문제가 있습니다.저는 GETDATE 기능을 사용하고 있지만, 스크립트를 오후 5시에 실행한다고 가정하면 12/12/2011 5시에서 12/18/2011 5시 사이의 레코드가 올라갑니다.어떻게 하면 12/12/2011 - 12/18/2011 전체에 대한 기록을 가져올 수 있습니까? 기본적으로 시간을 무시합니다.
내 대본:
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()))
DATEIFF는 1900-1-1 이전 또는 이후의 정수 일 수를 반환하고, 변환 날짜 시간은 자정에 해당 날짜로 반환합니다.
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
날짜 시간을 날짜로 변환한 다음 다시 날짜 시간으로 변환할 수 있습니다.타임스탬프가 재설정됩니다.
getdate 선택() --2020-05-05 13:53:35.863 출연진 선택(출연진(GETDATE())을 날짜 시간으로 선택) --2020-05-05:00:00.000
SELECT getdate()
결과: 2012-12-14 16:03:33.360
SELECT convert(datetime,convert(bigint, getdate()))
결과 2012-12-1500:00.000
@Bassam Mehanni가 언급했듯이 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를 날짜로 캐스트하지 않아도 되므로 성능이 크게 향상됩니다.
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())
이것은 저렴해 보일 수 있지만 저에게는 효과가 있습니다.
변환 선택(DATTIME,LEFT(변환(VARCHAR,@dateFieldOrVariable,101)+' 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)))
안녕하세요. 아래 쿼리를 사용해 보십시오.
select * from table where column_name <=(cast(GETDATE() as date)) and column_name >=(cast(GETDATE()-1 as date))
언급URL : https://stackoverflow.com/questions/8555316/rounding-sql-datetime-to-midnight
'programing' 카테고리의 다른 글
Xcode가 시스템 키체인을 사용하기 위해 계속해서 암호를 요청합니다. (0) | 2023.05.21 |
---|---|
속성 이름으로 개체의 속성 값을 가져오는 방법은 무엇입니까? (0) | 2023.05.21 |
FileUpload.hasFile은 항상 False입니다. (0) | 2023.05.21 |
mongodb가 Mac에서 실행되고 있는지 확인하는 방법은 무엇입니까? (0) | 2023.05.21 |
리소스(.resx) 파일의 이점은 무엇입니까? (0) | 2023.05.16 |