Как конвертировать 3 типа дат? - PullRequest
1 голос
/ 25 января 2012

Я хочу создать функцию, которая имеет параметр (строку, содержащую дату), а затем функция преобразует ее и возвращает.В нашей компании есть рабочие станции на трех разных языках.У нас также есть венгерские, английские и немецкие рабочие места.Я хочу прочитать дату из реестра, но эта дата будет записана в реестр в соответствии с текущими региональными настройками.

Таким образом, если региональная настройка является венгерской, то дата, записанная в регистр даты, - 2012.01.25 (ГГГ.ММ.ДД), но если я изменю региональную настройку на немецкую, то значение, записанное в реестр, будет25.01.2012 (ММ.ДД.ГГГГ).Если я изменю региональную настройку на английскую, то это будет значение 01/25/2012 (ДД.ММ.ГГГГ).

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

Вот почему я хочу создать функцию, которая получает дату, а затем преобразовывает ее в этот формат: YYYY.MM.DD,но я не знаю как это сделать.

Может ли кто-нибудь помочь мне, как это сделать?

Спасибо!

Ответы [ 3 ]

1 голос
/ 26 января 2012

Вы управляете этим значением реестра напрямую или оно принадлежит другому программному обеспечению и просто пытается изменить его?

Если это ваше, то

A. если это строковое значение, просто отформатируйте его перед сохранением в формат ISO (yyyy-MM-dd), функция format или formatdate добьется цели

B. если это двоичное значение, преобразуйте значение datetime в double с помощью cdbl и сохраните это

Ну, если это не твое, то это не твой счастливый день. Я сделал это пару лет назад и использовал текст вокруг даты, чтобы сделать предположение о формате ...

0 голосов
/ 25 января 2012

Вы можете использовать это выражение для преобразования ваших строк в тип SQL date.Это выражение использует формат DD/MM/YYYY только тогда, когда оно не может использовать формат по умолчанию MM/DD/YYYY .

CASE
    WHEN CHARINDEX('/', val)=5 THEN CONVERT(date,val,111)
    ELSE CONVERT(date, val, CASE WHEN LEFT(val,2) <= '12' THEN 101 ELSE 103 END)
END

Это выражение следует использовать внутри оператора select.Я предполагаю, что имя вашего varchar столбца, содержащего строку даты, равно val.

0 голосов
/ 25 января 2012

Если вы сохраняете эти даты в столбце типа даты (DATETIME, DATE, SMALLDATETIME и т. Д.), То не имеет значения, как они отображаются или на каком языке они были сохранены.Если вы хотите преобразовать DATE в VARCHAR в формате YYYY.MM.DD, вы можете использовать: CONVERT(VARCHAR(10),YourDate,102).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...