1508

SELECT GETDATE()

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

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

어떻게해야합니까?


  • 시간이없는 날짜 데이터 유형을 얻으려는 경우, 시간이 00:00:00이라도 운이 없다면 varchar를 얻을 수 있지만 구조는 datetime이며 항상 약간의 시간이 있습니다. - Quintin Robinson
  • SQL Server 2008에는 시간 구성 요소없이 날짜 만 저장하기위한 별도의 DATE 데이터 형식이 포함되어 있습니다. 여기에 더 많은 정보 :sql-server-performance.com/articles/dev/datetime_2008_p1.aspx - Ben Hoffstein
  • 놓치지 마세요.이 포스트다양한 시간 제거 방법의 성능 테스트 결과를 보여줍니다. - ErikE
  • 투표 및 승인 된 답변으로 오도하지 마세요.stackoverflow.com/a/126984/1155650 - Rohit Vipin Mathews
  • @Rohit 당신은 사람들이 신경 쓰는 유일한 버전이 2008이라고 가정하고 있습니다. (야생에 더 많은 버전이 있습니다.) 투표는 스스로를 말합니다. - hktegner

30 답변


2183

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


  • +1 이것은 일반적으로 사용되는 double convert () 메서드보다 35 % 빠릅니다 (몇 년 동안 사용 해왔음). 좋은 것. - Dane
  • 내가 당신의 솔루션에서 볼 수있는 유일한 단점은 그것이 무엇을하고 있는지 알지 못한다면 약간 둔감하다는 것입니다. 이중 변환 방법을 사용하면 코드 관리자를 추가하는 것이 더 명확합니다. 나는 너를 떨어 뜨리지 않았다. 나는 당신의 방법을 너무 사용하기 시작할 것입니다. 감사합니다 @aku - Jim Birchall
  • @pilavdzice datetime을 해당 날의 자정으로 설정합니다.~하다시간을 놓아 둡니다. 어떤 결과를 기대합니까? 그만큼datetime데이터 유형에는 가질 수 없습니다.전혀 시간이 없다.. 데이터 저장과 사용자 프리젠 테이션이 혼란 스럽다고 생각합니다. 원하는 모든 것이 사용자에게 시간 부분이없는 문자열 (0이 아닌 공백)을 표시하는 방법이면 원하는 경우Convert(varchar(30), @Date, 101)또는 비슷한 것. 만나다SQL Server 온라인 설명서 • 변환 및 변환더 많은 정보를 위해서. - ErikE
  • @ user1671639 datetime 데이터 유형에는 항상 날짜와 시간이 모두 포함되어 있으므로 SQL Server 2008을 사용하지 않는 한 현저하게 데이터를 저장할 수는 없습니다.이 경우 SQL Server 2008을 사용하는 경우 별도의 & # 39; 날짜 & # 39; & # 39; 시간 & # 39; 데이터 유형. 이와 같이 CONVERT ()를 사용하면 나중에 사용하기 위해 문자열을 원하기 때문에 그렇게하지 않아도됩니다. 날짜를 자르는 대신 날짜 형식 지정 함수를 사용하면 더 좋을지라도 off - 또는 viaCAST(... AS DATE)또는CONVERT(DATE, ...)이것은이 페이지에서 자주 언급되었습니다. - Magnus
  • 나는 대답을 바꿀 것을 권한다.SELECT DATEADD(dd, DATEDIFF(dd, 0, @your_date), 0)그때 때문에dd다른 어떤 것을 위해 스왑 아웃 될 수있다.datepart키워드를 자르려면datetime임의의 수준에서. - Michael

673

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

SELECT CONVERT(date, GETDATE())


  • & # 39; & # 39; 날짜와 시간을 분리하는 질문의 나머지 절반에 응답하는 SQL2008의 데이터 유형. - misteraidan
  • 참고로, 나는 날짜로부터 시간을 잘라내는 여러 가지 방법을 벤치마킹했으며 이것이 가장 빠른 방법이었다. 작은 차이는 있지만 큰 실행 횟수 동안 분명히 빨랐습니다. - UnhandledExcepSean
  • wt에 대해 sqlserver 2005 ?? - Dr. MAF
  • @ Dr.MAF 동그라미 완성, 2008 이전 답변 :stackoverflow.com/questions/113045/… - Frosty840

147

SQL 2008 이상을 사용하는 경우

select cast(getdate() as date)


  • @ FredrickGauss : 어떤 유형, 날짜? 어떤 버전의 SQL Server를 사용합니까? - abatishchev
  • 조심해! declare @ date1 datetime = & # 39; 2015-09-30 20 : 59 : 59.999 & # 39 ;; 선택 캐스트 (@ date1 as date)는 & # 39; 2015-10-01 & # 39;을 반환합니다. - Nick
  • @ 닉 : 이것은 DateTime의 문제입니다. 용도DateTime2대신 잘 작동합니다.sqlfiddle.com/#!6/9eecb7/2833 - abatishchev
  • @ 닉, abatishchev 응답을 보완하기 위해 @ date1 사실입니다2015-10-01때문에DateTime제한 사항. 캐스트하지 않고 사용해보기Date, 그것은 산출한다2015-10-01너무!declare @date1 datetime = '2015-09-30 23:59:59.999';select @date1= & gt;2015-10-01 - Frédéric
  • 기억하기 쉬운 SQL 트릭 중 하나. Mike가 말했듯이, 2008 년 이후지만, 2005 년과 이전 DB를 어딘가에서 찾으면 많은 문제가있을 수 있습니다 :) - NicVerAZ

69

DATEADD 및 DATEDIFF는 CONVERTing to varchar보다 좋습니다. 두 쿼리 모두 동일한 실행 계획을 갖고 있지만 실행 계획은 주로데이터전략에 액세스하고 모든 부분을 수행하는 데 소요 된 CPU 시간과 관련된 암시 적 비용을 항상 드러내지는 않습니다. 두 쿼리가 수백만 행이있는 테이블에 대해 실행되는 경우 DateDiff를 사용하는 CPU 시간은 Convert CPU 시간의 1/3에 가까워 질 수 있습니다!

쿼리 실행 계획을 확인하려면 다음을 수행하십시오.

set showplan_text on
GO 

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

CONVERT 솔루션은 일부 경우 더 간단하고 쉽게 읽을 수 있지만~이다.느린. datetime으로 다시 캐스트 할 필요가 없습니다 (이것은 서버에서 암시 적으로 수행됩니다). 정수 결과가 암시 적으로 다시 datetime으로 변환되기 때문에 DateAdd의 DateDiff 메소드에도 실제 필요가 없습니다.


SELECT CONVERT (varchar, MyDate, 101) FROM DATETable

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

SELECT DATEADD (dd, 0, DATEDIFF (dd, 0, MyDate)) FROM DatesTable

  |--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]))

FLOOR ()를 @digi로 사용하면 DateDiff에 가까운 성능을 보일 수 있지만 datetime 데이터 유형을 float로 캐스팅하고 항상 원래 값을 반환하지는 않는 것이 좋습니다.

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

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

캐시 최적화가 쿼리에 영향을 미치는 경우에 대한 혼란이있는 것 같습니다. 동일한 일괄 처리 또는 별도의 일괄 처리에서 두 개의 쿼리를 실행해도 캐싱에 아무런 영향을 미치지 않습니다. 따라서 수동으로 캐시를 만료 시키거나 쿼리를 앞뒤로 여러 번 실행할 수 있습니다. 질의 # 2에 대한 최적화는 이후의 질의에도 영향을 미치므로 원하는 경우 실행 # 1을 버리십시오.

여기있다.전체 테스트 스크립트 및 성능 결과DateDiff가 varchar로 변환하는 것보다 훨씬 빠릅니다.


  • 리카르도 C, 좋은 수사! 어떤 버전의 SQL Server를 사용합니까? datediff를 사용하는 MSSQL2000 방법은 나를 위해 약간 더 빠르게 수행됩니다. - aku
  • 참고로, 나는 1000.000 번 테스트를 수행했습니다. 실제 시나리오에서 성능 차이는 눈에 띄지 않을 것입니다. - aku
  • Aku, 나는이 테스트를 위해 SQL Server 2005 Express를 사용했습니다. 저는 2000 년 직장에서 일하고 있으며, 2 천 4 백만이 넘는 행이있는 테이블을 가지고 테스트 해보고 그 결과가 무엇인지 알아 봅니다. - Ricardo C
  • 아쿠, 같은 결과. 천만 행 이상의 성능 차이는 없습니다. - Ricardo C
  • 동등한 성과에 관한 주장은 사실이 아닙니다. 물론 실행 계획은 동일합니다 !!! 성능 측정은 실행 계획을 검토하지 않고 CPU 사용량을 비교하여 수행해야합니다. - ErikE

36

SELECT CONVERT(datetime, CONVERT(varchar, GETDATE(), 101))


40

이 시도:

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

위의 명령문은 현재 형식을YYYY/MM/DD, 참조하십시오이 링크원하는 형식을 선택하십시오.


  • 그러면 2008 년 9 월 22 일에 & # 39; 나를 위해 - eddiegroves
  • 111은 일본어 형식입니다. yyy / mm / dd - Ricardo C
  • SELECT CONVERT (VARCHAR (10), GETDATE (), 101)입니다.mm/dd/yyyy체재. - Flea
  • 원본 텍스트 값 (DB 외부)을 기준으로 정렬하는 경우 & # 39; 일본어 & # 39; 형식이 더 좋다. - Simon_Weaver
  • SQL Server 2005에서 작동합니다. - Raphael Amoedo

18

당신은CONVERT함수는 날짜 만 반환합니다. 아래 링크를 참조하십시오 :

SQL Server 2000의 날짜 및 시간 조작

변환 및 변환

convert 함수를 사용하는 구문은 다음과 같습니다.

CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 


17

날짜 형식으로 반환

CAST (주문일 AS 주문일)

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

2012 년 12 월 12 일처럼 돌아갑니다.

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

CONVERT(VARCHAR(10), OrderDate , 111)


  • 이것은 날짜가 아닌 제로 시간의 날짜를 반환합니다. - Bohemian
  • SQL Server를 사용하고 있다면 어떤 버전인지 알 수 있습니까? - Mahesh ML
  • @MheshML 그것은 MS SQL 2012에서 날짜와 시간을 반환합니다. - Marek
  • @ 마렉 그것은 MS SQL 2008 잘 작동합니다 - Mahesh ML
  • @MaheshML SQL Server 2010과 같은 것은 없습니다. - SvenAelterman

13

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

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


  • 이 방법은 가장 빠르지 않으며, 사람들을 캐스팅 날짜가 정확하다고 암시 적으로 가르쳐줍니다. 정확하지는 않습니다. 참조하십시오이 포스트자세한 내용은. - ErikE
  • 플로트 양자화 오류는 무섭다. - messenger

12

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


11

CONVERT를 사용하고 원본 질문과 동일한 결과를 얻으려면 yyyy-mm-dd를 사용하십시오.CONVERT(varchar(10),[SourceDate as dateTime],121)앞의 두 개와 동일한 코드가 대답하지만 대시가있는 yyyy-mm-dd로 변환하는 코드는 121입니다.

내가 잠깐 동안 내 비누 상자에 올 수 있다면,이러한 종류의 서식은 데이터 계층에 속하지 않습니다.따라서 실제 datepart 데이터 형식이 도입 될 때 SQL Server 2008까지 바보 같은 높은 오버 헤드 '트릭'이 없으면 불가능했습니다. 데이터 계층에서 이러한 변환을 수행하는 것은 DBMS의 오버 헤드를 낭비하는 것입니다.하지만 더 중요한 것은 두 번째로 이와 같은 작업을 수행하면 기본적으로 메모리에 고아가 된 데이터가 생성되어 프로그램으로 돌아갈 것이라고 가정합니다. 다른 3NF + 열로 되돌릴 수 없으며 되돌릴 필요없이 입력 한 것과 비교할 수 없기 때문에 오류 지점이 도입되고 관계형 참조가 제거됩니다.

당신은 항상 호출 프로그램에 dateTime 데이터 형식을 반환해야하며프리젠 테이션 단계에서 필요한 조정을하십시오.호출자에게 반환하기 전에 내용을 변환하는 즉시 응용 프로그램에서 참조 무결성의 모든 희망을 제거합니다. 이렇게하면 수동 복귀를 수행하지 않는 한 UPDATE 또는 DELETE 조작을 다시 방지 할 수 있습니다. 수동 복귀는 필요가 없을 때 다시 human / code / gremlin 오류에 노출됩니다.


  • 당신이 원하는 경우를 제외하고 말이죠.질문사용자가 제공 한 모든 레코드를 검색합니다.날짜특정 시간 필드의 날짜 - 부분으로. 행운을 빈다는 것은 프리젠 테이션 레이어에서만 가능합니다. (전환 할 필요가 없으며 날짜 산술을 사용할 수 있지만 아이디어를 얻습니다 ...) - Andrew Lazarus
  • @ 앤드류 왜 그렇게 중요합니까? 너는 말한다.WHERE col >= @Date AND col < DATEADD(DAY, 1, @Date);- 칼럼에서 시간을 제거 할 이유가 절대적으로 없습니다. - Aaron Bertrand
  • @AaronBertrand 입력을 가정 할 때만 작동합니다.@Date제로 시간 부분을 갖는다. 사실이 아니라면 서버 측 시간을 자르는 방법을 알아야합니다. 이 답변은 프리젠 테이션 레이어에 형식을 유지해야한다는 데 동의하지만 프런트 엔드에 대한 서식을 남겨두면 빠른 방법으로자를 필요가 없음을 의미하는 것에 동의하지 않았습니다. - Andrew Lazarus
  • @Andrew는 입력 매개 변수 DATE를 만드는 것뿐입니다. 내 요점은 여전히 절손한 부분을 절대로 적용해서는 안된다는 것입니다.기둥비록 대부분의 사람들의 첫 번째 본능이지만. - Aaron Bertrand
  • @AaronBertrand 및매개 변수의 데이터 유형을 제어 할 수 있다고 가정합니다. 저장 프로 시저에서는 좋지만 다른 상황에서는 가능하지 않습니다. 매개 변수가 원하는 유형인지 확인하기 위해 형 변환하지 않는 이유는 무엇입니까? - Andrew Lazarus

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))

편집 : 처음 두 메서드는 본질적으로 동일하고 out varchar 메서드로 변환을 수행하십시오.


  • 이 방법들은 모두 훌륭하지만 사용법은 어느 것입니까? - eddiegroves
  • "정확한" 상위 2 개 버전은select dateadd(dd, datediff(dd, 0, getdate()), 0)왜냐하면dds는 다음 중 하나에 대해 스왑 아웃 될 수 있습니다.그만큼datepart키워드선택한 모든 세그먼트에서 날짜를 자르십시오. (또한 유의하십시오.dd에 대한 약어 일 뿐이다.day.) - Michael

9

표시된 결과를 얻으려면 다음 명령을 사용합니다.

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

나는 유용하다.


9

사용중인 경우SQL Server 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        2011年10月1日

형식을 더 원하면 다음으로 가십시오.

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


8

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

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


8

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))OnlyDate로 --2014-03-26 00 : 00 : 00.000

2)SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 112))OnlyDate로 --2014-03-26 00 : 00 : 00.000

삼)

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

--2014-03-26 00 : 00 : 00.000


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

좋아, 내가 조금 늦었지만 :), 여기에 또 다른 해결책이 있습니다.

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

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


  • 답안에 무엇이 진행되고 있는지 설명하십시오. - Ben
  • 이 제안은 다른 답변 (두 번 이상)에서 다뤄졌습니다. - Andriy M

4

나는 언급되지 않은 다음을 선호한다.

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

또한 각 지역의 'datepart'는 아마 수학을하지만 로컬에 대해서는 신경 쓰지 않고 이중 변환을 수행합니다. 그래서 그것은 데이트 티프 방법보다 조금 느릴지도 모르지만 나에게는 훨씬 더 분명합니다. 특히 연중 무휴로 그룹화하고자 할 때 (하루를 1로 설정).


4

날짜:

SELECT CONVERT(date, GETDATE())
SELECT CAST(GETDATE() as date)

시각:

SELECT CONVERT(time , GETDATE() , 114)
SELECT CAST(GETDATE() as time)


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

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

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

다시 배열함으로써 m, d, year의 순서를 바꿀 수 있습니다.'%d-%m-%Y'부품


3

이것은 모든 답변에서 빠졌으며, 가장 효율적이지만 작성하기 쉽고, 스타일이 필요하지 않으며, 복잡한 날짜 기능도 없습니다.

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


3

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

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


  • YEar 부분 만 어떻게받을 수 있습니까? - bleykFaust

2

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

DATENAME => 지정된 날짜의 지정된 datepart를 나타내는 문자열을 리턴합니다.

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

DATEPART => 지정된 날짜의 지정된 datepart를 나타내는 정수를 리턴합니다.

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


2

날짜 (날짜 및 시간 필드)DATE_FORMAT (날짜 및 시간, '% Y- % m- % d')둘 다 돌아온다.유일한 날짜날짜 및 시간


  • 문제는 SQL Server를 나타냅니다. 이것은 MySQL처럼 보인다? - The1nk

연결된 질문


관련된 질문

최근 질문