2017-03-24 1 views
1

두 날짜 사이에 DB에 저장된 모든 데이터를 MS SQL에서 가져 오는 쿼리를 만들었습니다. 40 : 13 : 10 2017 13 3 월 :MS SQL 쿼리 : 날짜와 시간 출력을 다른 형식으로 변환하십시오.

SELECT convert(varchar(30), [date], 113) as "Date" 
FROM [I3_IC].[dbo].[Be] 
Where [date] >= '2017-03-13T00:00:00.000' AND [date] <= '2017-03-19T00:00:00.000' 

출력됩니다 017

그리고 난이 원하는 : 13-03-2017 10시 40분

모든 아이디어를 어떻게 할 수 그렇게?

+0

티아에서 더 작은 char - char (16)로 변환하면됩니다. –

답변

3

당신은 FORMAT 사용할 수 있습니다 여담으로

SELECT FORMAT(GETDATE(),'dd-MM-yyyy hh:mm') as [Date] 
FROM [I3_IC].[dbo].[Be] 
WHERE [date] >= '2017-03-13T00:00:00.000' 
AND [date] <= '2017-03-19T00:00:00.000'; 

을, 당신은 당신의 날짜 범위를 선택하는 데 사용하는 조건에주의해야합니다 (실제로 '2017-03-19T00:00:00.000'을 선택합니다 <= '2017-03-19T00:00:00.000'을, 당신이 원하는 것이 무엇입니까?)

합치
+2

아마도 HH와 HH의 차이를 12 시간 vs 24 시간 (Plus1) –

+0

라마크에게 고맙다. 지금 쿼리를 실행하면 올바른 데이터가 반환되고 해당 날짜 사이의 데이터가 반환됩니다. 내가 더 친숙한 형식으로 범위를 조정할 수 있다면 더 쉬워야합니다 :) – Paul

0

이전 SQL 서버 2012, 두 convert() styles

select convert(char(10),getdate(),105)+' '+convert(char(5),getdate(),108) 

반환 : 24-03-2017 16:05

SQL Server 2012 이상에서는 Lamak의 대답과 마찬가지로 format()을 사용할 수 있습니다.

select format(getdate(),'dd-MM-yyyy HH:mm') 

반환 : 24-03-2017 16:05

그러나 format()는 느린 여기 좀 걸릴 수 있습니다 : format() is nice and all, but… - Aaron Bertand


을 내 시스템에 빠른 테스트에서 convert()이에 대한 format()보다 훨씬 더 빨랐다 합치 (포맷되지 않은 값으로 정렬 된 상위 1을 선택하는 경우 제외).

+---------+--------------------+------------------+-------------------+-----------------+----------------+----------------------------------------------------------------------------------------------------------------+ 
| func | total_elapsed_time | avg_elapsed_time | total_worker_time | avg_worker_time | total_clr_time |              t              | 
+---------+--------------------+------------------+-------------------+-----------------+----------------+----------------------------------------------------------------------------------------------------------------+ 
| convert |    7000 | 1400.00   |    7000 | 1400.00   |    0 | DECLARE @d CHAR(10);SELECT @d = convert(char(10),d,105)+' '+convert(char(5),d,108) FROM dbo.dtTest ORDER BY d; | 
| format |    135000 | 27000.00   |   135000 | 27000.00  |   128000 | DECLARE @d CHAR(10);SELECT @d = format(d,'dd-mm-yyyy hh:mm') FROM dbo.dtTest ORDER BY d;      | 
| convert |    14000 | 2800.00   |    14000 | 2800.00   |    0 | SELECT d = convert(char(10),d,105)+' '+convert(char(5),d,108) FROM dbo.dtTest ORDER BY d;      | 
| format |    143000 | 28600.00   |   143000 | 28600.00  |   123000 | SELECT d = format(d,'dd-mm-yyyy hh:mm') FROM dbo.dtTest ORDER BY d;           | 
| convert |    1000 | 200.00   |    1000 | 200.00   |    0 | SELECT TOP (1) convert(char(10),d,105)+' '+convert(char(5),d,108) FROM dbo.dtTest ORDER BY d;     | 
| format |    1000 | 200.00   |    1000 | 200.00   |   1000 | SELECT TOP (1) format(d,'dd-mm-yyyy hh:mm') FROM dbo.dtTest ORDER BY d;          | 
| convert |    4000 | 800.00   |    4000 | 800.00   |    0 | DECLARE @d CHAR(16);SELECT @d = convert(char(10),d,105)+' '+convert(char(5),d,108) FROM dbo.dtTest ORDER BY d; | 
| format |    105000 | 21000.00   |   105000 | 21000.00  |   95000 | DECLARE @d CHAR(16);SELECT @d = format(d,'dd-mm-yyyy hh:mm') FROM dbo.dtTest ORDER BY d;      | 
+---------+--------------------+------------------+-------------------+-----------------+----------------+----------------------------------------------------------------------------------------------------------------+ 

테스트는 Aaron Bertrand가 작성한 기사에 포함 된 테스트 스크립트를 수정 한 것입니다. 수정 버전은 사용 중입니다. pastebin, here.

관련 문제