2016-09-29 7 views
0

Я работаю над докладом SSRS, и мне нужно отображать почасовые данные в таблице. Почасовой интервал должен отображаться как 4:00 pm - 5:00 pm У меня есть таблица журналов, которая имеет DateTime, доступную для каждой транзакции. Эта таблица обновляется ежедневно. Я группирую часовую составляющую этой метки времени, чтобы получить почасовое число. Есть ли опция SQL/SSRS для конвертирования почасового значения в формат 16:00 - 17:00?DateTime до временного интервала в T-Sql

+0

Преобразование графа, или имя столбца? Это выполнимо в обоих случаях, но я уверен, что вы знаете, как изменить заголовок таблицы в SSRS. Можете ли вы немного разобраться? – scsimon

+0

Я попробовал Right (100 + datepart (час, getdate()), 2), но он дает мне значения от 0 до 23 – viky

+0

И нет способа конвертировать дату и время в значение, которое вы хотите? – dfundako

ответ

0

Используйте оператор случай:

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 по результатам. Я не смог проверить запрос, так как я отправляю его с моего смартфона.

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

+0

Нет ли динамической опции? – viky

0

Используйте ниже скрипт для преобразования 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 

Пример вывода:

enter image description here

+0

Он по-прежнему дает мне минутный компонент, мне нужно 00 за минуту – viky

+0

Используйте обновленный скрипт. –

0

я рекомендовал бы вам просто создать простую скалярную функцию в 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());