복붙노트

[SQL] 날짜 + 시간과 날짜를 얻기 위해 SQL Server의 가장 효율적인 방법은?

SQL

날짜 + 시간과 날짜를 얻기 위해 SQL Server의 가장 효율적인 방법은?

MS SQL 2000 년과 2005 년, 같은 날짜 등을 주어진 '2008-09-25 12시 34분 56초'2008-09-25 '만을 포함하는 날짜를 얻을 수있는 가장 효율적인 방법이 무엇인지?

여기에 중복.

해결법

  1. ==============================

    1.내가 전에 매트로 표시 바닥 유동 변환을 보지 못했다 인정해야합니다. 나는 이것을 테스트했다.

    내가 전에 매트로 표시 바닥 유동 변환을 보지 못했다 인정해야합니다. 나는 이것을 테스트했다.

    나는, '순진'한 여기 (stringconvert) 언급 공통를 선별 순수 (날짜 및 시간을 반환하고, 우리가 원하는 것이 아닙니다 것이다), 여기에 일등 솔루션 (바닥 플로트)를 테스트 한 나는 것을 여기에 언급 사용 (I 생각으로는 가장 빠른이었다).

    나는 (3.5 기가에 대한 그래서의, 32 비트) 제온 3GHz의 CPU가 최대 메모리에서 실행과 승리 2003 SP2 서버에서 실행되는 테스트 서버 MS SQL 서버 2005 쿼리를 테스트했다. 나는 기계, 그래서 나는 그것의 밤은 거의 부하에 따라 공회전된다. 나는 모든 자신에 있어요.

    여기에 밀리 초 수준까지 변화하는 타임 스탬프를 포함하는 큰 테이블에서 내 테스트 실행 선택의 로그입니다. 이 특정 데이터 세트 이상 2.5 년까지 날짜가 포함되어 있습니다. 테이블 자체는 이상 1 억 3 천만 행이 그래서 왜 내가 최고 만 제한하는 것이.

    SELECT TOP 1000000 CRETS FROM tblMeasureLogv2 
    SELECT TOP 1000000 CAST(FLOOR(CAST(CRETS AS FLOAT)) AS DATETIME) FROM tblMeasureLogv2
    SELECT TOP 1000000 CONVERT(DATETIME, CONVERT(VARCHAR(10), CRETS, 120) , 120) FROM tblMeasureLogv2 
    SELECT TOP 1000000 DATEADD(DAY, DATEDIFF(DAY, 0, CRETS), 0) FROM tblMeasureLogv2
    

    우리는 여기에서 무엇을보고있다?

    CPU 시간 (우리가 변환보고있는), 우리는 우리가 다음 번호가 있는지 알 수에하자 초점 :

    Pure-Select:  422
    Floor-cast:   625
    String-conv: 1953
    DateAdd:      531  
    

    이로부터가 (이 특정 경우에 적어도)에 DateAdd 함수처럼 나에게 보이는 빠르게 바닥 주조 방식보다 약간이다.

    당신이 거기 가기 전에, 나는 같은 틱 결과 변경 쿼리의 순서로,이 테스트를 여러 번 실행.

    내 서버, 또는 무엇에 이상이 일이 있습니까?

  2. ==============================

    2.

    Select DateAdd(Day, DateDiff(Day, 0, GetDate()), 0)
    

    참조 DateDiff (일, 0,에 GetDate는 ()) 참조 DateDiff (일, '1900-01-01'에 GetDate ())와 동일

    참조 DateDiff는 정수를 반환 때문에, 당신은 당신이 그 다음 순 효과는 시간 구성 요소를 제거하고 1 월 1 일 1900 일의 정수를 추가 년 1 월 1 일 1900 년 이후 경과 일 수를 얻을 것이다.

    또한이 방법은 (년, 분기, 월, 일,시, 분처럼, 초) 어떤 날짜 / 시간 부분 작동하는지 언급해야한다.

    Select  DateAdd(Year, DateDiff(Year, 0, GetDate()), 0)
    Select  DateAdd(Quarter, DateDiff(Quarter, 0, GetDate()), 0)
    Select  DateAdd(Month, DateDiff(Month, 0, GetDate()), 0)
    Select  DateAdd(Day, DateDiff(Day, 0, GetDate()), 0)
    Select  DateAdd(Hour, DateDiff(Hour, 0, GetDate()), 0)
    Select  DateAdd(Second, DateDiff(Second, '20000101', GetDate()), '20000101')
    

    마지막 하나는, 초, 특수 처리가 필요합니다. 당신이 1900년 1월 1일를 사용하는 경우 오류가 발생합니다.

    두 날짜 컬럼의 차이는 런타임에 오버 플로우가 발생했습니다.

    당신은 다른 참조 날짜 (1월 1일 등, 2000)를 사용하여이 오류를 피할 수 있습니다.

  3. ==============================

    3.

    select cast(floor(cast(@datetime as float)) as datetime)
    

    작품 플로트에 날짜를 캐스팅하는 것은 (하루 분수 포함) 일 수 있습니다 년 1 월 1 일부터 1900 바닥재는 소수 일 잎 다음 날짜에 캐스팅 돌아올 수있는 모든 일의 수를 제거하기 때문에.

  4. ==============================

    4.SQL 서버 2012 사용

    SQL 서버 2012 사용

    select cast(getdate() as date)
    
  5. ==============================

    5.

    select cast(getdate()as varchar(11))as datetime
    
  6. ==============================

    6.YYYY-MM-DD를 얻기 위해 사용

    YYYY-MM-DD를 얻기 위해 사용

    select convert(varchar(10), getdate(), 120)
    

    편집 : 죄송합니다, 그는 날짜 시간 대신 문자열을 원한다. 오라클 TRUNC의 등가 (). 당신은 내가 게시 날짜 시간에 캐스트 다시 무엇을 수행 할 수 있습니다

    select convert(datetime, convert(varchar(10), getdate(), 120) , 120)
    
  7. ==============================

    7.CONVERT는, 플라워, DATEDIFF는 동일한 수행합니다.

    CONVERT는, 플라워, DATEDIFF는 동일한 수행합니다.

    방법 만 SQL Server 날짜 데이터 형식에서 날짜 부분을 반환

  8. ==============================

    8.세 가지 방법은 아래에서 설명 링크. 나는 성능은 그들을 빠른인지를 결정하기 위해 테스트하지 않았습니다.

    세 가지 방법은 아래에서 설명 링크. 나는 성능은 그들을 빠른인지를 결정하기 위해 테스트하지 않았습니다.

    http://www.blackwasp.co.uk/SQLDateFromDateTime.aspx

  9. ==============================

    9.CAST (FLOOR (CAST (AS yourdate 진수 (12, 5))) AS DATETIME)는 지금까지 최고의 행한다. SQL 서버에서 시간없이 날짜를 가져올 때 당신은 증거 및 테스트를 볼 수 있습니다

    CAST (FLOOR (CAST (AS yourdate 진수 (12, 5))) AS DATETIME)는 지금까지 최고의 행한다. SQL 서버에서 시간없이 날짜를 가져올 때 당신은 증거 및 테스트를 볼 수 있습니다

  10. ==============================

    10.무엇 SELECT CAST (INT AS (GETDATE () CAST) AS DATETIME)에 대해 ??

    무엇 SELECT CAST (INT AS (GETDATE () CAST) AS DATETIME)에 대해 ??

  11. ==============================

    11.

    CONVERT(VARCHAR(10), GETDATE(), 120) AS [YYYY-MM-DD]
    
  12. from https://stackoverflow.com/questions/133081/most-efficient-way-in-sql-server-to-get-date-from-datetime by cc-by-sa and MIT license