#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» для остальных.
- Я не понимаю, почему
Hour()
не будет работать подIIf()
. - Возможно, существует какой-то лучший обходной путь для этого случая, но я его не знаю.
Заранее благодарю
Редактировать:
Идея заключается в том, чтобы получать все события, которые начались между 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. не совсем то же самое, что я опубликовал — в нем есть похожий раздел — но я рад, что все это помогает!