Формат даты запроса SSRS и формат даты параметра отличаются?

BIDS/Visual Studio 2005

Привет, я просмотрел вопросы SO и не могу найти ответ. Я уверен, что где-то он должен быть.

Это выглядит как простая проблема, но я пробовал несколько вариантов, но не нашел решения!

Простой набор данных: «DateRange», чтобы дать мне формат dd/mm/yyyy hr:mn:ss, например

FromDate                 ToDate
2016-04-24 00:00:00.000 2016-04-25 23:59:59.997

select (CAST(FLOOR(CAST(dateadd(d,-1,getdate()) AS FLOAT) ) AS DATETIME)) AS 'FromDate',
DATEADD(ms, -3, DATEADD(dd, DATEDIFF(dd, -1, getdate()), 0)) as 'ToDate'

Затем я использую FromDate и ToDate в качестве параметров в отчете как значения по умолчанию. Однако затем они отображаются в полях параметров в формате "мм/дд/гггг чч:мин:сс"!

Настройки моей панели управления - британский английский. Это работает в Visual Studio «Предварительный просмотр», но падает при развертывании, поскольку дата не распознается! Какие-либо предложения??


person MiguelH    schedule 25.04.2016    source источник
comment
Я так понимаю, что формат даты в панели параметров зафиксирован в этом ужасном американском формате и никак не обойти его.   -  person Nick.McDermaid    schedule 04.05.2016


Ответы (2)


Каждый отчет имеет свои настройки локализации. На панели «Свойства» отчета вы увидите свойство Language в разделе «Локализация». Вы можете установить это значение на en-GB, что должно решить вашу проблему. Однако я обычно устанавливаю значение =User!Language, чтобы использовать региональные настройки пользователя.

Изменить

Поскольку это не работает, давайте преобразуем в военный формат даты (все элементы в порядке убывания — год, месяц, день, час и т. д.) в виде строки и позволим приложению преобразовать ее обратно в дату. Этот формат является наиболее надежным способом передачи дат, чтобы избежать региональных проблем:

select CONVERT(VARCHAR(23), (CAST(FLOOR(CAST(dateadd(d,-1,getdate()) AS FLOAT)) AS DATETIME)), 121) AS 'FromDate',
CONVERT(VARCHAR(23), DATEADD(ms, -3, DATEADD(dd, DATEDIFF(dd, -1, getdate()), 0)), 121) as 'ToDate'
person Chris Latta    schedule 26.04.2016
comment
Спасибо @ChisLatta. Я уже пытался установить язык на английский, но это ничего не изменило. Я также попробовал ваше предложение =User!Language, но и там не повезло! - person MiguelH; 26.04.2016

Единственное решение, которое я смог приступить к работе в доступное время, состояло в том, чтобы установить параметр SSRS в виде строки и преобразовать дату в строку следующим образом:

select distinct left(convert(varchar, (CAST(FLOOR(CAST(dateadd(d,-1,mydate)   AS FLOAT) ) AS DATETIME)),120),30) as FromDate,
left(convert(varchar, DATEADD(ms, -3, DATEADD(dd, DATEDIFF(dd, -1, mydate), 0)),120),30) as ToDate
from mydb
order by fromdate desc

Затем параметр CAST используется как дата в запросе. Немного беспокойства на самом деле!

person MiguelH    schedule 26.04.2016