[SQL] 초없는 시간 값 데이터로부터 추출하는 방법
SQL초없는 시간 값 데이터로부터 추출하는 방법
나는 SQL 날짜 시간을 가지고 (MS SQL 서버)와 초없이 동일한 날짜를 추출 할 : 예를 들면 2011-11-22 12 : 14 : 58.000이되기 위해 : 2011-11-22 12 : 14 : 00.000
이걸 어떻게 할 수 있습니까? 나는 DATEPART와 함께 DATEADD를 사용하여 생각하지만, 아주 (성능 문제 외에)가 발생하기 쉬운 오류가 보인다
해결법
-
==============================
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.
SELECT DATEADD(MINUTE, DATEDIFF(MINUTE, 0, yourcolumn), 0) FROM yourtable
당신이 데이터 유형 사이의 느린 전환을 원하지 않는 경우에, 유효합니다.
-
==============================
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.날짜 및 시간 필요 신중하지 텍스트로 변환된다.
날짜 및 시간 필요 신중하지 텍스트로 변환된다.
내 개인적인 솔루션 :
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.조금 주위 하구, 이것은 잘 작동하는 것 같다 :
조금 주위 하구, 이것은 잘 작동하는 것 같다 :
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.더 밀리 초 이상이없는 경우
더 밀리 초 이상이없는 경우
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.그것은 둥글게 :
그것은 둥글게 :
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);
from https://stackoverflow.com/questions/8896663/a-way-to-extract-from-a-datetime-value-data-without-seconds by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] PostgreSQL을 데이터베이스에 이미지를 삽입 (0) | 2020.05.28 |
---|---|
[SQL] SQL 문자열에 문자열의 첫 번째 발생을 교체 (0) | 2020.05.28 |
[SQL] 쿼리 로컬 변수 도움말 최적화로 저장 프로 시저의 입력 매개 변수를 지정합니까? (0) | 2020.05.28 |
[SQL] ADO.NET 매개 변수를 제공하는 방법 (0) | 2020.05.28 |
[SQL] 부모와 무한 어린이를 반환하는 문을 선택 (0) | 2020.05.28 |