Я работаю над докладом SSRS, и мне нужно отображать почасовые данные в таблице. Почасовой интервал должен отображаться как 4:00 pm - 5:00 pm У меня есть таблица журналов, которая имеет DateTime, доступную для каждой транзакции. Эта таблица обновляется ежедневно. Я группирую часовую составляющую этой метки времени, чтобы получить почасовое число. Есть ли опция SQL/SSRS для конвертирования почасового значения в формат 16:00 - 17:00?DateTime до временного интервала в T-Sql
ответ
Используйте оператор случай:
SELECT CASE
WHEN DATEPART(hour,TransactionDateTime) = 0 THEN '12:00am-01:00am'
WHEN DATEPART(hour,TransactionDateTime) = 1 THEN '01:00am-02:00am' ...
END FROM your_table
Динамический способ:
SELECT CASE
WHEN DATEPART(hour,TransactionDateTime) >12 THEN cast (DATEPART(hour,TransactionDateTime) -12 as VARCHAR (2)) + ':00pm-' +cast(DATEPART(hour,TransactionDateTime) -11 as VARCHAR (2)) + ':00pm'
WHEN DATEPART(hour,TransactionDateTime) <12
cast (DATEPART(hour,TransactionDateTime) as VARCHAR (2)) + ':00am-' +cast(DATEPART(hour,TransactionDateTime)+1 as VARCHAR (2)) + ':00am'
WHEN DATEPART(hour,TransactionDateTime) =12
cast (DATEPART(hour,TransactionDateTime) as VARCHAR (2)) +':00pm-1:00pm'
END
FROM your_table
Для углового случая (11 вечера) Ручка утра/вечера, используя вложенную заявление случай. проверьте дату и возвратите am/pm по результатам. Я не смог проверить запрос, так как я отправляю его с моего смартфона.
Надеется, что это помогает
Нет ли динамической опции? – viky
Используйте ниже скрипт для преобразования DateTime в 12-часового формат.
SELECT LEFT (STUFF(RIGHT('0'+LTRIM(RIGHT(CONVERT(varchar,YourColumn,100),7)),7),6,0,''),2)+':00'+RIGHT (LTRIM(RIGHT(CONVERT(VARCHAR(20), YourColumn, 100), 7)),2)
+' - '+LEFT (STUFF(RIGHT('0'+LTRIM(RIGHT(CONVERT(varchar, DATEADD(hh, 1, YourColumn),100),7)),7),6,0,''),2)+':00'+RIGHT (LTRIM(RIGHT(CONVERT(VARCHAR(20), DATEADD(hh, 1, YourColumn), 100), 7)),2)
FROM YourTable
Пример вывода:
Он по-прежнему дает мне минутный компонент, мне нужно 00 за минуту – viky
Используйте обновленный скрипт. –
я рекомендовал бы вам просто создать простую скалярную функцию в SQL Server для этого. См следующий пример:
CREATE FUNCTION DateTimeToHourInterval
(
@currentDateTime DATETIME
)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @nextHourDateTime DATETIME = DATEADD(HOUR, 1, @currentDateTime);
DECLARE @intervalStart VARCHAR(10) = REPLACE(REPLACE(LTRIM(RIGHT(CONVERT(VARCHAR(50), DATEADD(MINUTE, -1* DATEPART(MINUTE, @currentDateTime), @currentDateTime), 100), 7)), 'PM', ' PM'), 'AM', ' AM');
DECLARE @intervalEnd VARCHAR(10) = REPLACE(REPLACE(LTRIM(RIGHT(CONVERT(VARCHAR(50), DATEADD(MINUTE, -1* DATEPART(MINUTE, @nextHourDateTime), @nextHourDateTime), 100), 7)), 'PM', ' PM'), 'AM', ' AM');
RETURN @intervalStart + ' - ' + @intervalEnd
END
Функция теперь может быть использована следующим образом:
SELECT dbo.DateTimeToHourInterval(GETDATE());
Преобразование графа, или имя столбца? Это выполнимо в обоих случаях, но я уверен, что вы знаете, как изменить заголовок таблицы в SSRS. Можете ли вы немного разобраться? – scsimon
Я попробовал Right (100 + datepart (час, getdate()), 2), но он дает мне значения от 0 до 23 – viky
И нет способа конвертировать дату и время в значение, которое вы хотите? – dfundako