2010-03-29 2 views
0

Я использую службу отчетов sql server 2005 для создания базы отчетов в базе данных. Есть два столбца, которые имеют тип даты и времени ColumnA и ColumnB. В докладе будет отображать КПЭ изображение на этом докладе, сравнивая эти два columns.Below это выражение для выбора изображенияотображение изображения в отчете на основе двух дат

SWITCH(DateDiff("d",Fields!ColumnA.Value,Fields!ColumnB.Value)<0,"kpi_r", 
     DateDiff("d",Fields!ColumnA.Value,Fields!ColumnB.Value)>0,"kpi_g", 
     DateDiff("d",Fields!ColumnA.Value,Fields!ColumnB.Value)=0,"kpi_y") 

Для большинства записей, изображение правильно. Результат только для одной записи очень странный. Для этой записи

ColumnA = 2010-04-23 08:00:00 ColumnB = 2010-04-22 17:00:00 Он отображает kpi_r, он отображает kpi_y. Я проверил значение DateDiff (d, Fields! ColumnA.Value, Fields! ColumnB.Value) в SSMS, значение равно -1. Почему он отображает kpi_y? Кто-нибудь сталкивается с этой проблемой раньше?

С наилучшими пожеланиями,

ответ

1

Разница заключается в том, что функция SSMS DATEDIFF подсчитывает границы интервала между двумя датами, тогда как ReportBuilder подсчитывает фактические интервалы. В SSMS, если вы пересекаете полночь, вы активировали границу дня, поэтому в вашем примере вы получите -1. В ReportBuilder он ищет 24 часа между двумя значениями, поэтому вы получите 0. Если вы измените время, когда ColumnA будет «2010-04-23 17:00:00», вы увидите, что значение изменится на -1 как вы ожидали. Для вашего сравнения было бы, вероятно, целесообразно отключить компонент времени из столбцов ColumnA и ColumnB, когда вы выполняете эту инструкцию SWITCH.

0

вышеупомянутый ответ пятно сверху.

вот несколько способов раздеть время от даты в зависимости от ваших предпочтений:

1. сделать это в RS: использование и выражение как Dateserial (год (Fields ColumnA.Value), месяц (Fields ! ColumnA.Value), день (Поля ColumnA.Value)) в этом выражении переключатель

2. сделать это в SQL: использовать выражение как литой (раунд (литой (Columna, как поплавок), 0,1) как дата-время) в вашем запросе

Смежные вопросы