복붙노트

[SQL] 초없는 시간 값 데이터로부터 추출하는 방법

SQL

초없는 시간 값 데이터로부터 추출하는 방법

나는 SQL 날짜 시간을 가지고 (MS SQL 서버)와 초없이 동일한 날짜를 추출 할 : 예를 들면 2011-11-22 12 : 14 : 58.000이되기 위해 : 2011-11-22 12 : 14 : 00.000

이걸 어떻게 할 수 있습니까? 나는 DATEPART와 함께 DATEADD를 사용하여 생각하지만, 아주 (성능 문제 외에)가 발생하기 쉬운 오류가 보인다

해결법

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

    1.솔루션을 자릅니다 문자열이 시도 사용하는 것을 :

    솔루션을 자릅니다 문자열이 시도 사용하는 것을 :

    SELECT CAST(CONVERT(CHAR(16), GetDate(),20) AS datetime)
    

    포맷 지정자 (20)를 사용하여 위와 같이 우리 변수, ODBC 표준 포맷으로 변환하는 경우 CHAR (16) 만 작동한다.

    DECLARE @date DateTime = '2011 Nov 22 12:14:55';
    SELECT CONVERT(Char(16), @date ,20) AS datetime
    

    결과 :

    | datetime         |
    |------------------|
    | 2011-11-22 12:14 |
    

    그럼 당신은 단순히 값을 계속 사용하려면 날짜 시간 유형으로 다시 캐스팅.

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

    2.

    SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, yourcolumn), 0) FROM yourtable
    

    당신이 데이터 유형 사이의 느린 전환을 원하지 않는 경우에, 유효합니다.

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

    3.

    DECLARE @TheDate DATETIME
    SET @TheDate = '2011-11-22 12:14:58.000'
    
    DATEADD(mi, DATEDIFF(mi, 0, @TheDate), 0)
    

    쿼리에서

    /* ...all records in that minute; index-friendly expression */ 
    WHERE TheDate BETWEEN DATEADD(mi, DATEDIFF(mi, 0, @TheDate), 0) 
                      AND DATEADD(mi, DATEDIFF(mi, 0, @TheDate) + 1, 0)
    
  4. ==============================

    4.날짜 및 시간 필요 신중하지 텍스트로 변환된다.

    날짜 및 시간 필요 신중하지 텍스트로 변환된다.

    내 개인적인 솔루션 :

        CREATE FUNCTION [dbo].[fnDateTimeTruncated]
    (
        @datetime DATETIME
    )
    RETURNS DATETIME
    AS
    BEGIN
        RETURN DATETIMEFROMPARTS ( year(@datetime), month(@datetime), day(@datetime), DATEPART(hh,@datetime), DATEPART(mi,@datetime), 0, 0)
    END
    

    편집 :

    http://blog.waynesheffield.com/wayne/archive/2012/03/truncate-a-date-time-to-different-part/에 대해서는, DateAdd 함수는 더 나은 성능을 가지고있다. t-clausen.dk 덕분에

  5. ==============================

    5.조금 주위 하구, 이것은 잘 작동하는 것 같다 :

    조금 주위 하구, 이것은 잘 작동하는 것 같다 :

    SELECT CAST(CONVERT(CHAR(17), bl.[time],113) AS varchar(17))
    

    내가 선택 목록의 일부로서 내 쿼리를 사용하고 정확한 방법 :

    ,CAST(CONVERT(CHAR(17), bl.[time],113) AS varchar(17))
    + '    (UTC +0)' AS [TIME]
    
  6. ==============================

    6.더 밀리 초 이상이없는 경우

    더 밀리 초 이상이없는 경우

    DECLARE @dt datetime2 = '2011-11-22 12:14:58.000';
    DECLARE @goalDt datetime2 = DATEADD(second,-DATEPART(second,@dt), @dt);
    

    밀리 세컨드의 일부를 제거하려면 추가

    SET @goalDt = DATEADD(millisecond,-DATEPART(millisecond,@goalDt ), goalDt dt);
    
  7. ==============================

    7.그것은 둥글게 :

    그것은 둥글게 :

    DECLARE @TheDate DATETIME;
    SET @TheDate = '2019-1-2 12:14:58.400';
    
    SELECT CAST(@TheDate AS SMALLDATETIME);
    

    단지 잘라내 :

    DECLARE @TruncTheDate DATETIME;
    SET @TruncTheDate = '2019-1-2 12:14:58.400';
    
    SELECT DATEADD(mi, DATEDIFF(mi, 0, @TruncTheDate), 0);
    
  8. from https://stackoverflow.com/questions/8896663/a-way-to-extract-from-a-datetime-value-data-without-seconds by cc-by-sa and MIT license