SQL에서 시간없이 날짜를 선택하는 방법


257

SQL에서 날짜를 선택하면로 반환됩니다 2011-02-25 21:17:33.933. 그러나 Date 부분 만 필요합니다 2011-02-25. 어떻게해야합니까?


4
나는 그가 문자열을 원한다고 생각한다. 그래서 그것은 복제되지 않는다
bernd_k


@TylerH 현재 시간 대신 2011-02-25 00 : 00 : 00.000을 얻는 방법이 있습니까?
Thrainder

답변:


148

나는 그가 문자열을 원한다고 생각합니다.

select convert(varchar(10), '2011-02-25 21:17:33.933', 120)

(120)는 여기에 우리가의 입력 날짜 통과하는 변환 기능을 알려줍니다 다음과 같은 형식을 : yyyy-mm-dd hh:mi:ss.


120은 무엇입니까?
Павле


이 select convert (varchar (10), APPROVED_DATE, 120)을 사용했는데 APPROVED_DATE datetime 오류 열이 있는데 어떻게 변환합니까? 다중 파트 식별자 "LAB_RESULTS.APPROVED_DATE"를 바인딩 할 수 없습니다.
압둘라

530

6
"유형 날짜는 정의 된 시스템 유형이 아닙니다."
SeaDrive

10
DATE
Tim Schmelter

33
나는 이것이 왜 그렇게 공감 된 대답인지 전혀 모른다. 이 문제는 SQL Server 2005를 들면, NOT 2008 2005이없는 date, 따라서 무효로이 솔루션을 렌더링 데이터 유형입니다.
Joshua Burns

84
사람들이 저자가 아닌 문제에 대한 해결책을 찾고 있기 때문에 반대했습니다. 110 명의 사람들이 이것이 효과가 있다고 생각하면 110 개의 공감대가 있다고 생각합니다.
James

select convert (table.order_date, getdate ())를 사용할 때 동일한 오류가 발생합니다. sql 서버 버전 2017, 열 유형 datetime
Abdullah

57

가장 빠른 datediff예 :

select dateadd(d, datediff(d,0, [datecolumn]), 0), other..
from tbl

그러나 값만 사용하면 dateadd를 건너 뛸 수 있습니다.

select ...
WHERE somedate <= datediff(d, 0, getdate())

여기서 표현 datediff(d, 0, getdate())은 시간 부분없이 오늘 날짜를 반환하기에 충분합니다.


Oldie이지만 goodie는이 트릭을 2000/2005 이전 DB에서 수십 번 사용했습니다.
KeithS

43

나를 위해 일한 CAST (GETDATE () 날짜)를 간단하게 사용하십시오.


열 이름을 어디에 추가합니까? cast (getdate ()를 date, order_date)로 선택 하시겠습니까?
압둘라

@ 압둘라CAST(order_date AS DATE)
앤드류 모튼


12

이처럼 사용할 수 있습니다

SELECT Convert(varchar(10), GETDATE(),120) 

열 이름 주문 날짜를 어디에 넣을까요?
압둘라

10

대한 2008 이전 버전 :

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)


이것에 대한 박수! 다른 솔루션은 varchar (10) 부분에만 의존하므로 값이 잘립니다.
Gonza Oviedo

2

약간 늦었지만 ODBC "curdate"함수를 사용하십시오 (각괄호 'fn'은 ODBC 함수 이스케이프 시퀀스입니다).

SELECT {fn curdate()} 

산출: 2013-02-01


4
귀하의 답변이 허용 된 답변보다 낫다고 생각하는 방법에 대해 솔직히 궁금합니다. 아니면 다른 답변을 어디에서 참조합니까?
Mikael Eriksson

1
@Mikael Eriksson : 흠, ODBC 기능은 비 결정적 SQL-Server 함수와 달리 정식 함수이므로 인덱싱 가능하기 때문입니다. 당신이 생산에 1 개 * 10E6 항목을 테스트에 3 개 항목을 이동할 때 결코 마음, 그것은 단지 스케일링 문제, 당신은 개발하는 동안 아무런 문제를 얻을 수 없다)
스테판 스타 이거

8
이 쿼리를 실행 SELECT {fn curdate()} FROM (SELECT 1) AS T(X)하고 실제 실행 계획 (xml 버전)을 살펴보면 실제로 실행되는 것이 CONVERT(varchar(10),getdate(),23)입니다. 이 ODBC 함수의 데이터 타입은 그래서 varchar(10)당신이와 결과를 비교하려면 것을 어떤 수단 datetime이에서 암시 적 변환을 얻을 것이다 varchar(10)으로 datetime문자열에 yyyy-mm-dd. 암시 적 변환은로 실패합니다 set dateformat dmy.
Mikael Eriksson 2013

1
@Mikael Eriksson : 버그 인 것 같습니다. 대신 SELECT CONVERT (char (8), GETDATE (), 112)를 사용해야합니다.
Stefan Steiger

"비 결정적 SQL-Server 함수와 달리 정식 함수이므로 인덱싱 가능"-무엇?
Martin Smith


2

필요한 경우 동일한 데이터 시간을 유지하기 위해 날짜로 변환 한 후 날짜 시간으로 다시 변환

select Convert(datetime, Convert(date, getdate())  )

2

시간이 0이 필요한 경우 2018-01-17 00:00:00.000:

SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()), 121)


고마워, 이것이 내가 찾던 것이었다.
Pratik Ghag

1

사용은 간단합니다 :

convert(date, Btch_Time)

아래 예 :

표:

Efft_d       Loan_I  Loan_Purp_Type_C   Orig_LTV    Curr_LTV    Schd_LTV    Un_drwn_Bal_a      Btch_Time            Strm_I  Btch_Ins_I
2014-05-31  200312500   HL03             NULL         1.0000    1.0000         1.0000      2014-06-17 11:10:57.330  1005    24851e0a-53983699-14b4-69109


Select * from helios.dbo.CBA_SRD_Loan where Loan_I in ('200312500') and convert(date, Btch_Time) = '2014-06-17'

1

너무 늦었지만 다음과 같이 잘 작동했습니다.

declare @vCurrentDate date=getutcdate()

select @vCurrentDate

데이터 유형이 날짜 인 경우 시간이 잘립니다.


0

PLSQL에서는 다음을 사용할 수 있습니다

to_char(SYSDATE,'dd/mm/yyyy')

이것을 의견으로 옮기는 것을 고려하십시오.
xlembouras

이 질문은 Oracle이 아닌 SQL Server에 관한 것입니다.
Ben

0

먼저 날짜를 부동 소수점 (숫자 표시)으로 ROUND변환 한 다음 숫자를 0 소수점으로 변환 한 다음 datetime으로 변환하십시오.

convert(datetime,round(convert(float,orderdate,101),0) ,101)

0

날짜 유형을 날짜로만 반환하려면

CONVERT(date, SYSDATETIME())

또는

SELECT CONVERT(date,SYSDATETIME()) 

또는

DECLARE @DateOnly Datetime
SET @DateOnly=CONVERT(date,SYSDATETIME())

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