2016-11-12 6 views
0

У меня проблема в SQL Server 2008 R2. Я хочу получить HH:mm из колонки DATETIME2. Когда я пишу это заявление:Получить час: минуты от DATETIME2

SELECT CONVERT(VARCHAR(5), getdate(), 8) 

Я получаю идеальный результат, 11:19, но когда я пытаюсь получить время от:

SELECT (CONVERT(VARCHAR(5), '1900-01-01 01:10:00.0000000', 8)) 

Я получаю результат 1900 но мне нужно 01:10.

Как я могу получить результат этого заявления? Я знаю, что есть несколько вопросов/ответов, подобных этому, но я не нашел ответа, соответствующего моему вопросу.

+0

Вы понимаете, что оба утверждения не равны. [1] - преобразовать datetime в строку, используя стиль 8. [2] - преобразовать строку в строку с использованием стиля 8 – Squirrel

ответ

1

На стороне SQL Server (в хранимой процедуре, например), вы можете использовать этот вид преобразование:

declare @dt datetime2(0) = sysdatetime(); 

select @dt as [Date], left(convert(time(0), @dt, 108), 5) as [HH:mm]; 

Если необходимо отображать данные на стороне клиента, например, отчет или приложение, это лучше использовать возможности форматирования клиента. Таким образом, вы можете учитывать такие факторы, как предпочтительная система календаря, 12- или 24-часовые часы и т. Д.

+0

спасибо за этот ответ у меня есть upvote this –

0

Попробуйте это:

SELECT RIGHT('0' + CONVERT(VARCHAR(2), 
DATEPART(HOUR, '1900-01-01 01:10:00.0000000')), 2) hh, 
DATEPART(minute, '1900-01-01 01:10:00.0000000') mm 

Или

SELECT LEFT(CONVERT(TIME(0), '1900-01-01 01:10:00.0000000'), 2) hh , DATEPART(minute, '1900-01-01 01:10:00.0000000') mm

+0

, это возвращает 1:10 из вашего запроса, но я хочу 01:10 –

+0

спасибо за ваш ответ, но поддержка формата в 2012 sql server –

+0

oh пропустил тег. – James

0

Для многого формата длина 24H даты и времени является 19, так что вы можете использовать следующие

SELECT RIGHT('0' + CAST(DATEPART(HOUR, Substring('1900-01-01 01:10:00.0000000',1,19)) AS VARCHAR(2)), 2) + ':' + CAST(DATEPART(minute, substring('1900-01-01 01:10:00.0000000',1,19)) AS VARCHAR(2)) HHmm 

Надеются, что это помогает

+0

@ H.Fadlaallah Conversion не удалось при преобразовании значения varchar ':' в тип данных int –

+0

@ H.Fadlaalah Неправильный синтаксис около ')' –

0

Попробуйте это, я думаю, это то, что вы хотите.

это даст ответ: 1:10

SELECT CONVERT(VARCHAR(5),CONVERT(DATETIME,'1900-01-01 01:10:00.000'),8) 

Вы также можете попробовать этот

select convert(VARCHAR,DATEPART(HOUR,'1900-01-01 01:10:00.0000000'))+':'+CONVERT(VARCHAR,DATEPART(MINUTE,'1900-01-01 01:10:00.0000000'))