2016-11-02 4 views
1

군대를 표준으로 변환하고 있으며 시간 자체와 오전/오후 표기법 사이에 공백을 넣을 수있는 방법이 있는지 궁금합니다. 당신은 SQL 서버 2012을 사용하는 경우. 시간 자체가 사용자로부터오고있다)군대를 표준시로 변환 (시간과 AM/PM 사이에 공백 추가)

DECLARE @StartTime TIME(0) = @EncTime; 
DECLARE @MinutesToAdd INT = CONVERT(VARCHAR(10), @Minutes) 
DECLARE @SetEndTime VARCHAR(10) = (SELECT DATEADD(Minute, @MinutesToAdd, @StartTime) AS EndTime) 

SET @Converted = (SELECT CONVERT(VARCHAR, DATEADD(Minute, @MinutesToAdd, @StartTime), 100) AS EndTime) 
+4

그냥 "사용자로부터 입력을"변환하는 경우는, 왜 SQL에서 할? 실질적으로 모든 응용 프로그램 언어가이를 쉽게 수행 할 수 있습니다. SQL은 당신이 볼 수있는 것처럼 작업에 적합하지 않다. – Bohemian

+0

작업중인 문자열의 형식을 표시하면 도움이됩니다. –

+0

"군대를 표준으로"한다는 의미의 견고한 예를 들려 줄 수 있습니까? "20:09"에서 "8:09 PM"까지? – Schwern

답변

0

를 변수를 신경 쓰지 않는 이상 당신은 FORMAT() 함수를 사용하십시오. 귀하의 마지막 행은 다음과 같을 것이다 :

select format(cast(DATEADD(Minute, @MinutesToAdd, @StartTime) as datetime), 'hh\:mm tt') 

MSDN 참조 : https://msdn.microsoft.com/en-us/library/hh213505.aspx

+1

['FORMAT()'은 절대적인 개이다. 성능면에서] (https://sqlperformance.com/2015/06/t-sql-queries/format-is-nice-and-all-but) . 프리젠 테이션 계층을위한 것이라면, 프리젠 테이션 언어에서'.format()'을 수행하지 않을까요? –

+0

절대 개가 될 수 있지만 예제 쿼리에서 제안하는 것처럼 일부 입력을 기반으로 값을 설정하는 데 사용되는 경우 본질적으로 0ms 작업입니다. 나는 프리젠 테이션 로직 btw에서 이런 일을하는 것에 동의한다. 그냥 OP에서 제공 한 것에서 벗어난다. –

+0

이 경우 FORMAT을 사용하지만 성능이 중요 할 때 다른 방법을 사용합니까? 나는 일관성을 선호한다. YMMV. –