SSRS: Hour () для 24:00

#sql-server #function #reporting-services #ssrs-2008-r2

#sql-сервер #функция #службы отчетов #ssrs-2008-r2

Вопрос:

Я использовал Hour(Fields!tempo.Value) для получения часа из поля (tempo). Проблема возникла, когда я впервые получил «24: 00», и в отчете отображается ‘#error’.

В описании функции ‘Hour’ сказано:

Возвращает целое значение от 0 до 23, представляющее час дня

Итак, я изменил выражение на

=IIf(Fields!tempo.Value = "24:00", 0, Hour(Fields!tempo.Value))

но все же я получаю #error. Затем я попытался:

=IIf(Fields!tempo.Value = "24:00", 0, 1)

и правильно я получаю «0» для значений 24:00 и «1» для остальных.

  1. Я не понимаю, почему Hour() не будет работать под IIf() .
  2. Возможно, существует какой-то лучший обходной путь для этого случая, но я его не знаю.

Заранее благодарю

Редактировать:

Идея заключается в том, чтобы получать все события, которые начались между 2 часами каждый день (для фильтрации событий утром, днем и ночью):

 =IIf(Hour(Fields!tempo.Value) >= 22 Or Hour(Fields!tempo.Value) <= 6, SHOWTHIS, Nothing)
  

Комментарии:

1. Поступает ли «24:00» из базы данных и к какому типу данных относится это поле? И если данные являются результатом сохраненной процедуры, вы должны преобразовать их в t-sql перед отчетом.

2. поле — varchar, и оно не из хранимой процедуры.

3. Встроенный запрос в SSRS? можете ли вы показать это?

4. является ли 24:00 временем суток? Часто считается, что это неверно, и говорится, что это должно быть записано как 00:00.

5. @WEI_DBA, я не уверен, могу ли я поделиться запросом, но я отредактировал вопрос с помощью конечного выражения, которое я использую, и я думаю, что это более понятно. Если у вас еще есть какие-то вопросы, дайте мне знать. Большое спасибо за ваше время.

Ответ №1:

если вам не нужно выполнять операции с hour, вы можете работать со строками, чтобы получить hour, также, если ваш dataset возвращает строку, это самое простое решение (IMO).

Попробуйте использовать это выражение:

 =IIF(LEFT(Fields!tempo.Value,2)="24","0",REPLACE(LEFT(Fields!tempo.Value,2),":",""))
  

Если вы все еще хотите получить значение hour с помощью HOUR функции, вам придется дважды проверить ваше поле, в IIF и внутри HOUR функции:

 =IIF(Fields!tempo.Value="24:00",
0,
HOUR(IIF(Fields!tempo.Value="24:00","0:00",Fields!tempo.Value))
)
  

Дайте мне знать, если это поможет.

Комментарии:

1. Gracias! Я приму ответ @Andrew, потому что решаю проблему напрямую, но я ценю ваше время, и даже если бы это заняло немного больше времени, это тоже решение. Большое вам спасибо. У вас есть мой UV 😉

2. @HEDMON, ответ (фактически комментарий), опубликованный Эндрю 15 минут назад, является тем же ответом, который я опубликовал 40 ~ минут назад. Удачи.

3. О! Извините, я просматривал только первую версию вашего ответа, но вы правы. Принято.

4. не совсем то же самое, что я опубликовал — в нем есть похожий раздел — но я рад, что все это помогает!