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

SELECT GETDATE()

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

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

어떻게 구할 수 있습니까?



답변

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


답변

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

SELECT CONVERT(date, GETDATE())


답변

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

select cast(getdate() as date)


답변

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로 변환하는 것보다 훨씬 빠르다 는 전체 테스트 스크립트 및 성능 결과 입니다.


답변

이 시도:

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

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


답변

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


답변

날짜 형식으로 반환

CAST (주문 날짜)

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

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

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

CONVERT(VARCHAR(10), OrderDate , 111)