간단한 DateTime SQL 쿼리


83

특정 범위 내에서 DateTime 데이터베이스 필드를 어떻게 쿼리합니까?

SQL SERVER 2005를 사용하고 있습니다.

아래 오류 코드

SELECT * 
  FROM TABLENAME 
 WHERE DateTime >= 12/04/2011 12:00:00 AM 
   AND DateTime <= 25/05/2011 3:53:04 AM

특정 시간 범위 내에서 행을 가져와야합니다. 예 : 10 분 시간 범위.

현재 SQL은 '12'근처에서 잘못된 구문을 반환합니다. "


2
clyc의 대답이 맞습니다 : 따옴표를 추가해야합니다. where date = 1/12/2011예를 들어 작동하는 것처럼 보이지만 실제로는 2011 년 1 월 2 일을 나누고 0을 얻은 다음 0을 가능한 최소 datetime 값으로 취급 하기 때문에 이전에이 실수를 저질렀습니다 .
John Gibb

답변:


117

작은 따옴표를 놓쳤습니다.

SELECT * 
FROM TABLENAME 
WHERE DateTime >= '12/04/2011 12:00:00 AM' AND DateTime <= '25/05/2011 3:53:04 AM'

또한 ISO8601 형식 YYYY-MM-DDThh : mm : ss.nnn [Z]을 사용하는 것이 좋습니다. 이는 서버의 로컬 문화에 의존하지 않기 때문입니다.

SELECT *
FROM TABLENAME 
WHERE 
    DateTime >= '2011-04-12T00:00:00.000' AND 
    DateTime <= '2011-05-25T03:53:04.000'

잘 작동하지 않음 Msg 242, 수준 16, 상태 3, 줄 1 char 데이터 형식을 datetime 데이터 형식으로 변환하면 datetime 값이 범위를 벗어났습니다.
비켜

@overule-두 번째 예제를 사용해보십시오
Alex Aza

@overule-또한 열에 datetime 유형이 있는지 확인하십시오.
Alex Aza

3
@Eric-yyyymmdd는 시간이 없습니다.
Alex Aza

8

날짜로 전달하려는 문자열 주위에 따옴표가 필요하며 여기에서 BETWEEN을 사용할 수도 있습니다.

 SELECT *
   FROM TABLENAME
  WHERE DateTime BETWEEN '04/12/2011 12:00:00 AM' AND '05/25/2011 3:53:04 AM'

형식을 지정하는 동안 문자열을 날짜로 명시 적으로 변환하는 방법에 대한 예제는 다음 질문에 대한 답변을 참조하십시오.

SQL 서버 문자열을 날짜로 변환


위와 같은 오류입니다. Msg 242, Level 16, State 3, Line 1 char 데이터 형식을 datetime 데이터 형식으로 변환하면 datetime 값이 범위를 벗어났습니다. 정말 혼란 스럽습니다.
ove

오, 방금 날짜 시간을 복사했습니다. 25/05가 있지만 아마도 월 / 날짜가 예상되므로 둘 다 전환하십시오. 나는 내 대답을 편집하고 여기에 문자열을 명시 적으로 날짜로 변환하는 방법을 보여주는 좋은 질문에 연결했습니다
Milimetric

6

이것은 SQL Server 2005와 2008 모두에서 저에게 효과적이었습니다.

SELECT * from TABLE
WHERE FIELDNAME > {ts '2013-02-01 15:00:00.001'}
  AND FIELDNAME < {ts '2013-08-05 00:00:00.000'}

5

아래 코드를 실행할 수 있습니다.

SELECT Time FROM [TableName] where DATEPART(YYYY,[Time])='2018' and DATEPART(MM,[Time])='06' and DATEPART(DD,[Time])='14

1
SELECT * 
  FROM TABLENAME 
 WHERE [DateTime] >= '2011-04-12 12:00:00 AM'
   AND [DateTime] <= '2011-05-25 3:35:04 AM'

이것이 작동하지 않으면 테이블을 스크립트로 작성하여 여기에 게시하십시오. 이렇게하면 정답을 신속하게 얻을 수 있습니다.


1
select getdate()

O/P
----
2011-05-25 17:29:44.763

select convert(varchar(30),getdate(),131) >= '12/04/2011 12:00:00 AM'

O/P
---
22/06/1432  5:29:44:763PM

1

다른 사람들은 이미 SQL Server의 날짜 리터럴을 작은 따옴표로 묶어야한다고 말했지만 월 / 일 혼동 문제를 두 가지 방법으로 해결할 수 있다고 덧붙이고 싶습니다 (즉, 25가 월로 표시되고 5 일) :

  1. Convert(datetime, 'datevalue', style)스타일이 숫자 스타일 코드 중 하나 인 명시 적 위치를 사용합니다 . 캐스트 및 변환을 참조하십시오 . 스타일 매개 변수는 날짜를 문자열로 변환하는 것뿐만 아니라 문자열을 날짜로 구문 분석하는 방법을 결정하기위한 것입니다.

  2. 문자열로 저장된 날짜에는 지역 독립적 형식을 사용하십시오. 내가 사용하는 것은 'yyyymmdd hh : mm : ss'이거나 ISO 형식을 고려하십시오 yyyy-mm-ddThh:mi:ss.mmm. 실험에 따르면 다른 언어 고정 형식 문자열은 없습니다. (마지막에 시간대를 포함시킬 수 있다고 생각하지만 위 링크를 참조하십시오).


0

SQL 데이터를 내보내려는 액세스 파일을 엽니 다. 거기에있는 모든 쿼리를 삭제하십시오. SQL Server 가져 오기 마법사를 실행할 때마다 실패하더라도 SQL 내보내기 마법사를 다시 실행하기 전에 삭제해야하는 쿼리가 Access DB에 생성됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.