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.