programing

where 절의 날짜/시간

batch 2023. 7. 20. 21:48
반응형

where 절의 날짜/시간

다음에서 12/20/2008을 선택하려면 어떻게 해야 합니까?wheresql의 절?

서버는 SQL server 2005입니다.

select * from tblErrorLog
where errorDate = '12/20/2008'
WHERE datetime_column >= '20081220 00:00:00.000'
  AND datetime_column < '20081221 00:00:00.000'

우선 날짜/시간에 대해 ISO-8601 표준 형식을 사용하는 것이 좋습니다. SQL Server의 언어 및 지역 설정에 상관없이 작동합니다.ISO-8601은YYYYMMDD형식 - 공백 없음, 대시 없음 - 데이터만:

select * from tblErrorLog
where errorDate = '20081220'

두 번째로 SQL Server 2005를 인식해야 합니다.DATETIME항상 시간을 포함합니다.날짜 부분만 정확하게 일치하는지 확인하면 0:00:00 시간과 일치하는 행만 표시되고 다른 행은 표시되지 않습니다.

언급된 권장 범위 쿼리를 사용하거나 SQL Server 2008에서DATE날짜 시간만 - 또는 다음과 같은 확인 작업을 수행할 수 있습니다.

select * from tblErrorLog
where DAY(errorDate) = 20 AND MONTH(errorDate) = 12 AND YEAR(errorDate) = 2008

당신에게 가장 적합한 것.

이 쿼리를 자주 수행해야 하는 경우에는 다음을 표준화할 수 있습니다.DATETIME날짜만 포함하거나 일, 월 및 년에 대해 계산된 열을 추가할 수 있습니다.

ALTER TABLE tblErrorLog
   ADD ErrorDay AS DAY(ErrorDate) PERSISTED
ALTER TABLE tblErrorLog
   ADD ErrorMonth AS MONTH(ErrorDate) PERSISTED
ALTER TABLE tblErrorLog
   ADD ErrorYear AS YEAR(ErrorDate) PERSISTED

그러면 더 쉽게 질문할 수 있습니다.

select * from tblErrorLog
where ErrorMonth = 5 AND ErrorYear = 2009

등등.이러한 필드는 계산되고 지속되기 때문에 항상 최신 상태이고 항상 최신 상태이며 지속되기 때문에 필요한 경우 색인화할 수도 있습니다.

어떤 데이터베이스를 사용하고 있는지는 말하지 않지만 MS SQL Server에서는

WHERE DateField = {d '2008-12-20'}

타임스탬프 필드인 경우 범위가 필요합니다.

WHERE DateField BETWEEN {ts '2008-12-20 00:00:00'} AND {ts '2008-12-20 23:59:59'}

SQL Server DateTime을 사용한다고 가정합니다.

참고: BETHIN은 범위의 양쪽 끝을 포함하므로 기술적으로 이 패턴은 잘못될 수 있습니다.

errorDate BETWEEN '12/20/2008' AND '12/21/2008'

이러한 시간 범위에 대해 제가 선호하는 방법은 다음과 같습니다.

'20081220' <= errorDate AND errordate < '20081221'

공통 인덱스(Range Scan, SARGable, 기능 없음)와 함께 작동하며 SQL Server의 시간 세분성에 의존하지 않고 다음날 자정에 올바르게 클리핑합니다(예: 23:59:59.997).

변환 함수를 사용하여 특정 날짜의 모든 항목을 가져옵니다.

Select * from tblErrorLog where convert(date,errorDate,101) = '12/20/2008'

자세한 내용은 CASTCONVERT를 참조하십시오.

select * from tblErrorLog
where errorDate BETWEEN '12/20/2008' AND DATEADD(DAY, 1, '12/20/2008')

명확한 이해를 위해 아래 쿼리 사용

/****** Script for SelectTopNRows command from SSMS  ******/
SELECT *
  FROM [dbo].[PublishedInfo]
  where PublishedDate >= '2022-02-14T11:31:16.5299166+00:00'

언급URL : https://stackoverflow.com/questions/1947436/datetime-in-where-clause

반응형