64

이 질문에는 이미 답변이 있습니다.

DELETE from Table WHERE Date > GETDATE();

GETDATE ()에는 시간이 포함됩니다. 점점

2011-01-26 14:58:21.637

어떻게받을 수 있습니까?

2011-01-26 00:00:00.000


  • 또한,>=오히려>또는 실제로 2011-01-26 00 : 00 : 00.000 ... 인 레코드 삭제를 놓칠 수 있습니다. - Matt Gibson
  • 좋은 전화, 나는 실제로이 코멘트를 읽기 전에 그것을 바꿨다 :) - sooprise
  • 간단한 해결책은cast(left(getdate(), 11) as datetime) - Mohammad Anini

7 답변


70

SQL Server에 약간의 바이어스

개요

DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

SQL Server 2008에는date그러나 유형. 그래서 그냥 사용하십시오.

CAST(GETDATE() AS DATE)

편집 : 하루를 추가하려면 "0"전날과 비교하십시오.

DATEADD(day, DATEDIFF(day, -1, GETDATE()), 0)

사이버 스키 :

2 가지 기능을 포함하지 않는 대안은 (괄호 안에 +1이있을 수 있습니다.)

DATEDIFF(DAY, 0, GETDATE() +1)

DateDiff숫자를 반환하지만 모든 목적을 위해이 표현식을 VARCHAR로 직접 변환하는 것을 제외하고는이 표현식을 사용하려는 모든 위치에서 날짜로 작동합니다.이 경우 직접 CONVERT 방식을 GETDATE ()에 사용했을 것입니다.

convert(varchar, GETDATE() +1, 102)


  • 이 값에 하루를 어떻게 추가합니까? - sooprise
  • CAST (GETDATE () + 1 AS DATE)를 선택하십시오. - eidgenossen
  • @eidgenossen : 단순하지만 암시 적 변환에 의존합니다. 덜 명확합니다. - gbn

9

SQL Server 2008의 경우 최상의 인덱스 방식은 다음과 같습니다.

DELETE from Table WHERE Date > CAST(GETDATE() as DATE);

이전 SQL Server 버전의 경우 날짜 계산은 varchar 로의 변환보다 빠르게 작동합니다. varchar로 변환조차도 지역 설정 때문에 잘못된 결과를 줄 수 있습니다.

DELETE from Table WHERE Date > DATEDIFF(d, 0, GETDATE());

참고 : 랩핑 할 필요는 없습니다.DATEDIFF다른 사람과DATEADD


  • "이전" DATEADD가없는 스타일은 int에서 date 로의 암시적인 변환에 의존합니다.상위. 이것은 실제로 DATEADD에 실제로 있습니까? 이 방법이 더 깔끔해 보이더라도 명시 적 변환을 선호합니다. - gbn
  • QO가 어떻게 진행되는지는 모르지만 DATEADD를 수동으로 요청할 이유는 없습니다. 데이터 유형은 datetime이지만,internally비교할 때 숫자로 변환되므로 int로 그냥 두는 것이 좋습니다. - RichardTheKiwi

7

데이터베이스와 관련이 있습니다. 사용중인 데이터베이스 엔진을 지정하지 않았습니다.

예 : PostgreSQL에서는 (myvalue를 날짜로) 캐스트합니다.



5

SELECT CONVERT(DATETIME, CONVERT(varchar(10), GETDATE(), 101))


  • 101은 무엇입니까? - sooprise
  • 출력 문자열의 형식을 결정합니다 (이 경우 mm / dd / yyyy hh : mm : ss). 따라서 varchar (10)는 시간 부분을 자릅니다. - JohnOpincar

0

당신이 사용할 수있는

DELETE from Table WHERE Date > CONVERT(VARCHAR, GETDATE(), 101);


  • 그 문자열을 반환합니다. 암시 적 변환에 의존하지 않는 것이 가장 좋습니다. 대신 명시 적으로 날짜 또는 날짜 / 시간으로 형변환하십시오. - Leigh

-1

CONVERT(varchar,GETDATE(),102)


  • 102는 무엇입니까? - sooprise
  • 101, 102 등은 CONVERT 함수의 매개 변수 일뿐입니다. 나는 당신이 실제로 mm / dd / yyyy의 형태로 101을 사용하고 싶어 할 것이라고 믿는다. 102는 mm.dd.yyyy의 형태로 나는 믿는다. - Saggio
  • 그 문자열을 반환합니다. 암시 적 변환에 의존하는 대신 명시 적으로 날짜에 명시 적으로 변환하는 것이 가장 좋습니다. - Leigh

-1

여기에 몇 가지 솔루션이 있습니다.)

http://www.bennadel.com/blog/122-Getting-Only-the-Date-Part-of-a-Date-Time-Stamp-in-SQL-Server.htm


  • 죄송합니다. 링크가 불완전합니다 : dateadd / datediff 기술을 고려하지 않았습니다. - gbn

연결된 질문


관련된 질문

최근 질문