SQL Server DateTime 데이터 형식에서 Date 만 반환하는 방법


1777
SELECT GETDATE()

보고: 2008-09-22 15:24:13.790

시간 부분이없는 날짜 부분을 원합니다. 2008-09-22 00:00:00.000

어떻게 구할 수 있습니까?


4
시간이없는 날짜 데이터 유형을 얻으려는 경우 시간이 00:00:00 인 경우에도 운이 좋지 않으면 varchar를 얻을 수 있지만 구조는 날짜 시간이며 항상 시간이 있습니다.
Quintin Robinson

16
SQL Server 2008에는 시간 구성 요소없이 날짜 만 저장하기위한 별도의 DATE 데이터 형식이 포함되어 있습니다. 자세한 정보는 여기 : sql-server-performance.com/articles/dev/datetime_2008_p1.aspx
Ben

7
다양한 시간 제거 방법의 성능 테스트 결과를 보여주는 이 게시물 을 놓치지 마십시오 .
ErikE

18
투표로 오도하지 말고 답을 얻으십시오. stackoverflow.com/a/126984/1155650
Rohit Vipin Mathews

8
@Rohit 2008 년이 사람들이 관심을 갖는 유일한 버전이라고 잘못 가정하고 있습니다. (야생 버전이 더 있습니다.) 투표는 스스로를 말합니다.
hktegner

답변:


2487

SQL Server 2008이상을 수행해야 CONVERT날짜 :

SELECT CONVERT(date, getdate())

이전 버전에서는 다음을 수행 할 수 있습니다.

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))

예를 들어

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

나에게 준다

2008-09-22 00:00:00.000

장점 :

  • 없음 varchar<-> datetime전환 필요
  • 생각할 필요가 없습니다 locale

마이클이 제안한대로

이 변형을 사용하십시오 : SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)

select getdate()

SELECT DATEADD(hh, DATEDIFF(hh, 0, getdate()), 0)
SELECT DATEADD(hh, 0, DATEDIFF(hh, 0, getdate()))

SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, getdate()))

SELECT DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0)
SELECT DATEADD(mm, 0, DATEDIFF(mm, 0, getdate()))

SELECT DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0)
SELECT DATEADD(yy, 0, DATEDIFF(yy, 0, getdate()))

산출:

2019-04-19 08:09:35.557

2019-04-19 08:00:00.000
4763-02-17 00:00:00.000

2019-04-19 00:00:00.000
2019-04-19 00:00:00.000

2019-04-01 00:00:00.000
1903-12-03 00:00:00.000

2019-01-01 00:00:00.000
1900-04-30 00:00:00.000

52
+1이 방법은 일반적으로 사용되는 double convert () 메소드보다 35 % 빠릅니다 (수년 동안 사용해 왔음). 좋은데
Dane

8
내가 당신의 해결책에 볼 수있는 유일한 단점은 그것이 무엇을하고 있는지 알지 못한다면 약간 애매하다는 것입니다. 이중 변환 방법을 사용하면 코드 관리자에게 도움이 될 의도가 더 분명해집니다. BTW 난 당신을 downvoted하지 않았습니다. 나는 당신의 방법을 사용하기 시작할 것이라고 생각합니다. Thank you @aku
Jim Birchall

38
@pilavdzice 그 날의 자정에 날짜를 설정 않습니다 LEAVE OFF 시간은. 어떤 결과를 기대하십니까? datetime데이터 유형이 수 없습니다 전혀 시간을 . 데이터 저장을 사용자 프레젠테이션과 혼동하고 있다고 생각합니다. 원하는 모든 것이 시간 부분이없는 문자열 (0이 아니라 공백)을 표시하는 방법이라면 간단하게 원 Convert(varchar(30), @Date, 101)하거나 비슷합니다. 자세한 내용은 SQL Server 온라인 설명서 • 캐스트 및 변환 을 참조하십시오.
ErikE

7
@ user1671639 datetime 데이터 형식에는 항상 날짜와 시간이 모두 포함되어 있으므로 SQL Server 2008을 사용하지 않는 한 다른 날짜없이 시간을 저장할 수 없습니다.이 경우 별도의 '날짜'와 '시간'데이터가 있습니다 유형. 그런 식으로 CONVERT ()를 사용하면 나중에 사용하기 위해 문자열을 원할 것이므로 날짜를 자르지 않고 날짜 형식화 함수를 사용하는 것이 좋습니다. CAST(... AS DATE)또는 CONVERT(DATE, ...)이 페이지에서 꽤 자주 언급되었습니다.
Magnus

10
나는에 대한 답 변경하는 것이 좋습니다 SELECT DATEADD(dd, DATEDIFF(dd, 0, @your_date), 0)후 때문에하는 것은 dd다른 위해 밖으로 교환 할 수있는 datepart당신을 절단하는 키워드 datetime임의의 수준에서.
마이클 - 클레이 셔키는 어디

717

SQLServer 2008에는 이제 시간 구성 요소가없는 날짜 만 포함하는 '날짜'데이터 형식이 있습니다. SQLServer 2008 이상을 사용하는 사람은 다음을 수행 할 수 있습니다.

SELECT CONVERT(date, GETDATE())

41
SQL2008에는 날짜 및 시간 분리 문제의 나머지 절반에 대한 '시간'데이터 형식도 있습니다.
misteraidan

8
참고로, 날짜에서 시간을 줄이는 다양한 방법을 벤치마킹했으며 이것이 가장 빠른 방법이었습니다. 차이는 작았지만 많은 수의 실행에 비해 분명히 더 빨랐습니다.
UnhandledExcepSean

2
sqlserver 2005에 대한 wt?
Dr. MAF

@ Dr.MAF 2008 년 이전의 답변은 다음과 같습니다. stackoverflow.com/questions/113045/…
Frosty840

170

SQL 2008 이상을 사용하는 경우 :

select cast(getdate() as date)

3
@FredrickGauss : 어떤 유형, 날짜? 어떤 버전의 SQL Server를 사용하십니까?
abatishchev

7
조심해! @ date1 datetime = '2015-09-30 20 : 59 : 59.999'를 선언; select cast (@ date1 as date)는 '2015-10-01'을 반환합니다.
Nick

6
@ 닉 : 이것은 DateTime의 문제입니다. DateTime2대신 사용 하면 정상적으로 작동합니다. sqlfiddle.com/#!6/9eecb7/2833
abatishchev

8
@Nick, abatishchev 응답을 보완하기 위해 @ date1은 실제로 제한 사항 2015-10-01으로 인해 DateTime있습니다. 어떤 캐스트없이 시도 Date, 그것은 산출 2015-10-01너무! declare @date1 datetime = '2015-09-30 23:59:59.999';select @date1=>2015-10-01
프레데릭

4
기억하기 쉬운 SQL 트릭 중 하나입니다. 마이크가 말한대로 당신이 2005 년 이전 DB의 곳을 찾을 경우에만 2008 년 이후하지만, 당신은 :) 문제가 많이있을 수 있습니다
NicVerAZ

73

DATEADD 및 DATEDIFF가 varchar로 변환하는 것보다 낫습니다. 두 쿼리 모두 동일한 실행 계획이 있지만 실행 계획은 주로 데이터 액세스 전략 에 관한 것이며 모든 부분을 수행하는 데 소요되는 CPU 시간과 관련된 암시 적 비용을 항상 밝히지는 않습니다. 두 쿼리가 수백만 개의 행이있는 테이블에 대해 실행되는 경우 DateDiff를 사용하는 CPU 시간은 CPU 변환 시간의 1/3에 가깝습니다!

쿼리 실행 계획을 보려면

set showplan_text on
GO 

DATEADD와 DATEDIFF는 모두 CONVERT_IMPLICIT를 실행합니다.

CONVERT 솔루션은 더 단순하고 읽기 쉽지만 속도 느립니다. datetime으로 캐스트 할 필요는 없습니다 (이것은 서버에 의해 내재적으로 수행됨). 정수 결과도 암시 적으로 datetime으로 다시 변환되므로 DateAdd의 DateDiff 메소드에는 실제로 필요하지 않습니다.


변환 선택 (varchar, MyDate, 101) FROM DatesTable

  |--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101)))
       |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

날짜 테이블에서 DATEADD (dd, 0, DATEDIFF (dd, 0, MyDate)) 선택

  |--Compute Scalar(DEFINE:([Expr1004]=dateadd(day,(0),CONVERT_IMPLICIT(datetime,datediff(day,'1900-01-01 00:00:00.000',CONVERT_IMPLICIT(datetime,[TEST].[dbo].[DatesTable].[MyDate],0)),0))))
       |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

@digi가 제안한대로 FLOOR ()을 사용하면 DateDiff에 더 가까운 성능을 갖지만 datetime 데이터 형식을 부동 소수점으로 캐스팅하면 항상 원래 값을 생성하지는 않습니다.

사람을 기억하십시오 : 아무도 믿지 마십시오. 성능 통계를보고 직접 테스트하십시오!

결과를 테스트 할 때주의하십시오. 클라이언트에 많은 행을 선택하면 계산을 수행하는 것보다 네트워크를 통해 행을 보내는 데 시간이 오래 걸리기 때문에 성능 차이가 숨겨집니다. 따라서 모든 행에 대한 작업이 서버에 의해 수행되지만 클라이언트로 전송 된 행 세트가 없는지 확인하십시오.

캐시 최적화가 쿼리에 영향을 미치는시기에 대해 일부 사람들에게는 혼동이있는 것 같습니다. 동일한 배치 또는 별도의 배치에서 두 개의 쿼리를 실행해도 캐싱에는 영향을 미치지 않습니다. 따라서 캐시를 수동으로 만료하거나 쿼리를 여러 번 앞뒤로 실행할 수 있습니다. 쿼리 # 2에 대한 최적화는 후속 쿼리에도 영향을 미치므로 원하는 경우 실행 # 1을 버립니다.

다음은 DateDiff가 varchar로 변환하는 것보다 훨씬 빠르다 는 전체 테스트 스크립트 및 성능 결과 입니다.


리카르도 C, 좋은 조사! 어떤 버전의 SQL Server를 사용하십니까? datediff가있는 MSSQL2000 방법에서 약간 더 빠르게 수행됩니다.
aku

참고로, 나는 1000.000 번 테스트를 수행했습니다. 실제 시나리오에서는 성능 차이가 눈에 띄지 않을 것입니다.
aku

Aku, 저는이 테스트에 SQL Server 2005 Express를 사용했습니다. 저는 2000 년 직장에서 일하고 있으며 2,400 만 행이있는 테이블로 테스트하고 그 결과를 볼 것입니다.
Ricardo C

아쿠, 같은 결과. 천만 행 이상의 성능 차이가 없습니다.
Ricardo C

5
동등한 성능에 대한 주장은 사실이 아닙니다. 물론 실행 계획은 동일합니다 !!! 이들에 대한 성능 측정은 실행 계획을 검토하지 않고 CPU 사용량을 비교하여 수행해야합니다.
ErikE

51

이 시도:

SELECT CONVERT(VARCHAR(10),GETDATE(),111)

위의 설명은 현재 형식을로 변환합니다 . 원하는 형식을 선택 YYYY/MM/DD하려면 이 링크 를 참조하십시오 .


5
이것은 나를 위해 '2008/09/22'를 반환합니다
eddiegroves

1
SELECT CONVERT (VARCHAR (10), GETDATE (), 101) mm/dd/yyyy형식입니다.
Flea

4
원시 텍스트 값 (DB 외부)을 기준으로 정렬하는 경우 '일본어'형식이 더 좋습니다
Simon_Weaver


21

날짜 형식으로 반환

CAST (주문 날짜)

위 코드는 SQL Server 2010에서 작동합니다.

그것은 2013 년 12 월 12 일처럼 반환됩니다

SQL Server 2012의 경우 아래 코드를 사용하십시오.

CONVERT(VARCHAR(10), OrderDate , 111)

1
이것은 날짜뿐만 아니라 제로 시간으로 날짜를 반환합니다.
보헤미안

1
사용중인 SQL Server의 경우 어떤 버전을 알 수 있습니까?
Mahesh ML

1
@MaheshML은 MS SQL 2012에서 날짜와 시간을 모두 반환합니다.
Marek

1
SQL Azure의 매력처럼 작동
Martín Coll

5
@MaheshML SQL 서버 2010 같은 것은 없다
SvenAelterman


16

당신이 같은 결과를해야 할 경우 varchar, 당신은 통과한다

SELECT CONVERT(DATE, GETDATE()) --2014-03-26
SELECT CONVERT(VARCHAR(10), GETDATE(), 111) --2014/03/26

이미 위에서 언급했습니다.

날짜 및 시간 형식의 결과가 필요한 경우 아래 쿼리 중 하나를 사용해야합니다.

  1. SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 111)) AS OnlyDate 

    2014-03-26 00 : 00 : 00.000

  2. SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 112)) AS OnlyDate 

    2014-03-26 00 : 00 : 00.000

  3. DECLARE  @OnlyDate DATETIME
    SET @OnlyDate = DATEDIFF(DD, 0, GETDATE())
    SELECT @OnlyDate AS OnlyDate

    2014-03-26 00 : 00 : 00.000


14
SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),103) --21/09/2011

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),101) --09/21/2011

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),111) --2011/09/21

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),107) --Sep 21, 2011

13

FLOOR () 사용-시간 부분을 잘라냅니다.

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)

4
이 방법은 가장 빠르지 않으며, 날짜를 부동으로 캐스팅하는 것이 정확하지 않다는 것을 암시 적으로 알려줍니다. 자세한 내용은 이 게시물 을 참조하십시오 .
ErikE

13

당신이 사용하는 경우 SQL 서버 2012 이상 버전을 ,

Format()기능을 사용하십시오 .

SQL 서버에는 이미 여러 가지 답변과 형식이 있습니다. 그러나 대부분의 방법은 다소 모호하므로 특정 날짜 형식과 관련하여 형식 유형 또는 함수의 숫자를 기억하기가 어렵습니다. 그렇기 때문에 다음 버전의 SQL Server에는 더 나은 옵션이 있습니다.

FORMAT ( value, format [, culture ] )

문화권 옵션은 시청자별로 날짜를 지정할 수 있으므로 매우 유용합니다.

d (작은 패턴의 경우)와 D (긴 패턴의 경우)를 기억해야합니다.

1. "d"-간단한 날짜 패턴.

2009-06-15T13:45:30 -> 6/15/2009 (en-US)
2009-06-15T13:45:30 -> 15/06/2009 (fr-FR)
2009-06-15T13:45:30 -> 2009/06/15 (ja-JP)

2. "D"-긴 날짜 패턴.

2009-06-15T13:45:30 -> Monday, June 15, 2009 (en-US)
2009-06-15T13:45:30 -> 15 июня 2009 г. (ru-RU)
2009-06-15T13:45:30 -> Montag, 15. Juni 2009 (de-DE)

쿼리에서 더 많은 예제.

DECLARE @d DATETIME = '10/01/2011';
SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result'
      ,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result'
      ,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result'
      ,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result'; 

SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result'
      ,FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result'
      ,FORMAT ( @d, 'D', 'de-de' ) AS 'German Result'
      ,FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result';

US English Result Great Britain English Result  German Result Simplified Chinese (PRC) Result
----------------  ----------------------------- ------------- -------------------------------------
10/1/2011         01/10/2011                    01.10.2011    2011/10/1

US English Result            Great Britain English Result  German Result                    Chinese (Simplified PRC) Result
---------------------------- ----------------------------- -----------------------------  ---------------------------------------
Saturday, October 01, 2011   01 October 2011               Samstag, 1. Oktober 2011        2011101

더 많은 형식을 원하면 다음으로 이동할 수 있습니다.

  1. 표준 날짜 및 시간 형식 문자열
  2. 사용자 정의 날짜 및 시간 형식 문자열

12

CONVERT를 사용하고 원래 질문에서와 동일한 결과를 얻으려면, 즉 yyyy-mm-dd를 사용 CONVERT(varchar(10),[SourceDate as dateTime],121)하여 이전 커플 답변과 동일한 코드 를 사용 하지만 대시로 yyyy-mm-dd로 변환하는 코드는 121.

soapbox를 잠깐 동안 사용할 수 있다면 이런 종류의 서식은 데이터 계층에 속하지 않기 때문에 실제 datepart 데이터 형식이 SQL Server 2008이 될 때까지 너무 많은 오버 헤드 '트릭'이 없으면 불가능한 것입니다. 소개했다. 데이터 계층에서 이러한 변환을 수행하는 것은 DBMS에 대한 오버 헤드를 크게 낭비하지만, 더 중요한 것은 이와 같은 작업을 수행 할 때 기본적으로 메모리에 고아가없는 데이터를 만든 다음 프로그램으로 돌아갈 것입니다. 다시 다른 3NF + 열에 다시 넣거나 되 돌리지 않고 입력 한 것과 비교할 수 없으므로 실패 지점이 발생하고 관계형 참조가 제거됩니다.

계속해서 dateTime 데이터 유형을 호출 프로그램 및 프리젠 테이션 티어에 리턴하고 필요한 조정을 수행하십시오. 호출자에게 반환하기 전에 변환하는 즉시 응용 프로그램에서 참조 무결성에 대한 모든 희망을 제거합니다. 이것은 일종의 수동 복귀를 수행하지 않으면 UPDATE 또는 DELETE 작업을 다시 방지 할 수 있습니다.


1
단, 사용자 제공 날짜 와 일치하는 모든 레코드를 특정 시간 필드의 날짜 부분으로 검색 하는 쿼리 를 원하는 경우를 제외하고 . 프리젠 테이션 레이어에서만 그렇게하세요. (당신은 변환이 필요하지 않습니다, 당신은 날짜 산술을 사용할 수 있지만, 당신은 아이디어를 얻을 수 있습니다 ...)
앤드류 나사로

1
@ 앤드류가 왜 중요한가? 당신은 말합니다 WHERE col >= @Date AND col < DATEADD(DAY, 1, @Date);-칼럼에서 시간을 제거 할 이유가 전혀 없습니다.
Aaron Bertrand

1
@AaronBertrand 입력에 @Date시간 부분이 없다고 가정하는 경우에만 작동합니다 . 사실이 아닌 경우에도 서버 측에서 시간을 자르는 방법을 알아야합니다. 이 대답에 동의하면 서식을 프레젠테이션 레이어에 남겨 두어야하지만 프런트 엔드를 그대로두면 빨리 자르는 빠른 방법을 알 필요가 없다는 의미에 동의하지 않습니다.
앤드류 나사로

1
@Andrew는 입력 매개 변수를 DATE로 설정하기 만하면됩니다. 내 요점은 여전히 대부분의 사람들이 처음 본능이더라도 열에 그런 자르기를 적용하지 않아도된다는 것입니다.
Aaron Bertrand

1
@AaronBertrand 그리고 그것은 당신이 매개 변수의 데이터 유형을 제어 할 수 있습니다 가정합니다. 저장 프로 시저에서는 양호하지만 다른 상황에서는 불가능합니다. 매개 변수가 원하는 유형인지 확인하기 위해 캐스트하지 않겠습니까?
앤드류 나사로

10
SELECT DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)

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

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

편집 : 처음 두 방법은 본질적으로 동일하며 varchar 방법으로 변환을 수행합니다.


1
이 방법들은 모두 훌륭하지만 어떤 방법을 사용하는 것이 좋습니까?
eddiegroves

3
상단이의 "올바른"버전이 있습니다 select dateadd(dd, datediff(dd, 0, getdate()), 0)때문에, ddS는 다음 중 어떤으로 교체 할 수 키워드 당신이 선택하는 어떤 세그먼트에서 날짜를 클립 할 수 있습니다. (또한 이 단어는의 약어 일뿐입니다 .)datepartddday
Michael-Clay Shirky의 위치

10

표시된 결과를 얻으려면 다음 명령을 사용하십시오.

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

유용하다고 생각합니다.


8
 Convert(nvarchar(10), getdate(), 101) --->  5/12/14

 Convert(nvarchar(12), getdate(), 101) --->  5/12/2014

7

결과를 열 또는 변수에 지정하는 경우 DATE 유형을 지정하면 변환이 내재적입니다.

DECLARE @Date DATE = GETDATE()   

SELECT @Date   --> 2017-05-03

6

나는 이것이 당신의 경우에 효과가 있다고 생각합니다 :

CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate
//here date is obtained as 1990/09/25

6
DECLARE @yourdate DATETIME = '11/1/2014 12:25pm'    
SELECT CONVERT(DATE, @yourdate)

2
이 제안은 다른 답변 (두 번 이상)으로 덮여 있습니다.
Andriy M

6

좋아, 비록 조금 늦었지만 :) 다른 해결책이 있습니다.

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DATETIME)

결과

2008-09-22 00:00:00.000

그리고 SQL Server 2012 이상을 사용하는 경우 다음 FORMAT()과 같은 기능 을 사용할 수 있습니다.

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd')

첫 번째 예제에는 여전히 시간 구성 요소가 있습니다. 문제의 핵심은 그것을 제거하는 방법이었습니다.
Zack

5

고대 MSSQL Server 7.0을 사용하더라도 여기의 코드 (이 링크 제공 )를 사용하여 당시에 원하는 날짜 형식을 얻을 수있었습니다.

PRINT '1) Date/time in format MON DD YYYY HH:MI AM (OR PM): ' + CONVERT(CHAR(19),GETDATE())  
PRINT '2) Date/time in format MM-DD-YY: ' + CONVERT(CHAR(8),GETDATE(),10)  
PRINT '3) Date/time in format MM-DD-YYYY: ' + CONVERT(CHAR(10),GETDATE(),110) 
PRINT '4) Date/time in format DD MON YYYY: ' + CONVERT(CHAR(11),GETDATE(),106)
PRINT '5) Date/time in format DD MON YY: ' + CONVERT(CHAR(9),GETDATE(),6) 
PRINT '6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): ' + CONVERT(CHAR(24),GETDATE(),113)

이 출력을 생성했습니다.

1) Date/time in format MON DD YYYY HH:MI AM (OR PM): Feb 27 2015  1:14PM
2) Date/time in format MM-DD-YY: 02-27-15
3) Date/time in format MM-DD-YYYY: 02-27-2015
4) Date/time in format DD MON YYYY: 27 Feb 2015
5) Date/time in format DD MON YY: 27 Feb 15
6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): 27 Feb 2015 13:14:46:630

5

데이트:

변환 선택 (날짜, GETDATE ())
CAST (GETDATE ()를 날짜로 선택)

시각:

변환 선택 (time, GETDATE (), 114)
시간으로 CAST (GETDATE () 선택)

5

간단히 다음과 같이 할 수 있습니다.

SELECT CONVERT(date, getdate())
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

다음과 같이 출력됩니다 :

2008-09-22 00:00:00.000

또는 단순히 다음과 같이하십시오 :

SELECT CONVERT (DATE, GETDATE()) 'Date Part Only'

결과:

Date Part Only
--------------
2013-07-14

4

왜 DATE_FORMAT (your_datetiem_column, '% d- % m- % Y')을 사용하지 않습니까?

전의: select DATE_FORMAT( some_datetime_column, '%d-%m-%Y' ) from table_name

'%d-%m-%Y'부분 을 다시 정렬하여 m, d 및 year의 순서를 변경할 수 있습니다


4

나는 이것이 오래되었다는 것을 알고 있지만, 아무도이 방법으로 그것을 어디에 언급했는지 알 수 없습니다. 내가 알 수 있듯이 이것은 ANSI 표준입니다.

SELECT CAST(CURRENT_TIMESTAMP AS DATE)

Microsoft가 ANSI 표준 CURRENT_DATE 변수도 지원할 수 있다면 좋을 것입니다.


select {fn current_date()} as today나를 위해 작동합니다.
brianary

@brianary-훌륭하지만 ANSI SQL이 아닙니다.
조명

그것은 충분히 공평하고 귀하의 대답은 훌륭하지만 T-SQL을 다루는 한 작동합니다 (ANSI CURRENT_DATE를 구현하는 것이 MS에게는 쉽지 않음을 보여줍니다).
brianary

4

언급되지 않은 다음을 선호합니다.

DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))

또한 각 'datepart'가 수학을 수행하더라도 로컬에 신경 쓰지 않거나 이중 변환을 수행하지 않습니다. 따라서 datediff 방법보다 약간 느릴 수 있지만 나에게는 훨씬 명확합니다. 특히 연도 및 월별로 그룹화하려는 경우 (하루를 1로 설정).


4

SQL SERVER 2012부터는 다음을 수행 할 수 있습니다.

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00.000')


4

SQL Server 2000에서

CAST(
(
    STR( YEAR( GETDATE() ) ) + '/' +
    STR( MONTH( GETDATE() ) ) + '/' +
    STR( DAY( GETDATE() ) )
)
AS DATETIME)


3

날짜 부분과 날짜 형식에 다음을 사용할 수 있습니다.

DATENAME => 지정된 날짜의 지정된 날짜 부분을 나타내는 문자열을 반환합니다.

DATEADD =>이 DATEPART()함수는 연도, 월, 일,시, 분 등과 같은 날짜 / 시간의 단일 부분을 반환하는 데 사용됩니다.

DATEPART => 지정된 날짜의 지정된 날짜 부분을 나타내는 정수를 반환합니다.

CONVERT()=> CONVERT()함수는 한 데이터 유형의 표현식을 다른 데이터 유형으로 변환하는 일반 함수입니다. 이 CONVERT()기능을 사용하여 날짜 / 시간 데이터를 다른 형식으로 표시 할 수 있습니다.

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