2012-07-04 5 views
4

В моем веб-приложении все значения даты преобразуются в UTC перед передачей в базу данных SQL, а затем преобразуются обратно в локальное время всякий раз, когда они отображаются в приложении. Таким образом, нижняя строка заключается в том, что все даты указаны в UTC в базе данных.Изменение часового пояса SQL Server 2008

Это работало нормально, пока я не начал разработку отчета. В Crystal Reports нет возможности (я могу обнаружить) для преобразования часового пояса, поэтому мне нужно сделать преобразование в SQL перед передачей значения в отчет.

SQL Server, похоже, имеет гораздо более ограниченную возможность конвертировать значения даты и времени. Единственная функция, которую я вижу, - SWITCHOFFSET. Проблема с этой функцией заключается в том, что она не знает о дневном свете, которая, по-видимому, является основным недостатком. В asp.net я могу передать значение datetime с часовым поясом, и оно автоматически преобразует его в UTC, принимая во внимание любые необходимые корректировки времени на летнее время.

В SQL, хотя, вместо того чтобы сказать что-то вроде

SWITCHOFFSET (SomeDate,"Eastern Time"), 

теперь я должен сказать

SWITCHOFFSET(SomeDate, "-4:00"). 

Но что произойдет, если я потянув данные из таблицы и я прошу всех данные за март, месяц, когда начинается переход на летнее время? Независимо от того, некоторые из них будут неправильными. Я могу сказать: -4: 00 или -5: 00, но, очевидно, не оба.

Есть ли какая-то другая функция, чтобы приспособиться к этому, так как, откровенно говоря, кажется, что SWITCHOFFSET наполовину выпекается, если он не знает, как сделать переход на летнее время.

ответ

1

Единственный способ, которым я могу думать:

  • Используйте C# интеграции, чтобы создать метод для этого;) Слава богу, вы можете возвратиться к этому.

  • Используйте VIEWS для запуска отчетности против них. ВСЕГДА хорошая идея, поскольку она отделяет отчеты (вне вашего прямого контроля) от схемы базы данных, которая представляет собой деталь реализации. Обычно у меня есть отчет SCHEMA, который имеет все представления для отчетов как еще один документированный API.

Последнее, но не менее важное: МОЖНО попытаться избавиться от SQL Access и использовать OData API, но это определенная работа.

Во всяком случае, представления могут использовать метод, который вы запрограммировали для преобразования времени.

+0

К сожалению, я на Azure и он не поддерживает CLR. –

+2

Тогда, сэр, у вас есть проблема. Просто так. Одна из причин, по которой я избегаю азара от Лазуры - другая - высокая цена и неспособность больших баз данных. – TomTom

+0

Я не вижу его как проблему Лазури. Я думаю, что это проблема с часовым поясом, в целом, и пребывание в среде с несколькими арендаторами делает проблему более очевидной. – 1c1cle

0

Для тех, кто использует отчеты SSRS, вы можете обнаружить TimeZone в SSRS. Обратитесь к сообщению здесь для получения дополнительной информации.

Working with Time Zones in SSRS

-1

Похоже, может быть, ваш запрос будет предоставлен

AT TIME ZONE

В SQL 2016 года, во всяком случае

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