Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 формат даты - зависимость от региональных настроек  [new]
ADVO
Member

Откуда:
Сообщений: 39
Здравствуйте.
Подскажите куда копать.
Windows server 2008, MSSQL 2008

Хочу, чтоб заработали запросы вида
select CAST('2012.04.29' as smalldatetime)
select @@LANGUAGE

Сейчас первый выдает
Преобразование типа данных varchar в тип данных smalldatetime привело к выходу значения за пределы диапазона.
Второй выдает: русский.

У всех в настройках соединения прописан русский, системный формат русского dd.mm.yyyy.

Без Set dateformat[src], Cast, Convert и без универсальной записи YYYYMMDD.
8 июл 13, 18:07    [14537827]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
ADVO, поясните, что значит "хочу, чтобы работал запрос с CAST, но без CAST"?
И зачем эти ограничения?
8 июл 13, 18:19    [14537926]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
Гость333
Member

Откуда:
Сообщений: 3683
ADVO
Без Set dateformat[src], Cast, Convert и без универсальной записи YYYYMMDD.

Mission: impossible.
8 июл 13, 18:25    [14537980]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
ADVO,
Если желание вызвано способом хранения дат в таблице, то вполне подойдет
select CAST(REPLACE('2012.04.29','.','') as smalldatetime)

ADVO
Без Set dateformat[src], Cast, Convert и без универсальной записи YYYYMMDD.
во всяком случае, явного YYYYMMDD нет :)
8 июл 13, 18:28    [14538018]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
ADVO
Member

Откуда:
Сообщений: 39
Cast для примера, что на формат ругнется.
Причина проста - нельзя править код, т.е. только серверные настройки.
8 июл 13, 18:30    [14538035]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
ADVO, передаваемые данные тоже нельзя править? Настройками проблема не решается.
8 июл 13, 18:33    [14538062]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
ADVO
Member

Откуда:
Сообщений: 39
Minamoto
ADVO, передаваемые данные тоже нельзя править? Настройками проблема не решается.

Да, передаваемые данные нельзя править.
Раз 2012.29.04 разберет без проблем, то где-то заложен подобный формат.
Вот только где?
8 июл 13, 18:39    [14538095]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
Гость333
Member

Откуда:
Сообщений: 3683
ADVO
где-то заложен подобный формат.
Вот только где?

Надо полагать, заложен разработчиками Microsoft в исходные коды SQL Server'а.
8 июл 13, 18:46    [14538146]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
ADVO
Member

Откуда:
Сообщений: 39
Гость333
ADVO
где-то заложен подобный формат.
Вот только где?

Надо полагать, заложен разработчиками Microsoft в исходные коды SQL Server'а.

select CAST('2012-04-29 00:00:00' as smalldatetime)
select CAST('29-04-2012' as smalldatetime)
select CAST('29.04.2012' as smalldatetime)
select @@LANGUAGE--русский

Второй и третий вариант даты отображает без проблем.
Я думаю, что их сервер сравнивает с системной маской даты у Windows, выбранной локали.
Но почему первый вариант упорно впихивает день после года. Вот что мне непонятно.
8 июл 13, 18:53    [14538172]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Мягко говоря, странная ситуация...
Код править нельзя, передаваемые данные править нельзя, в запросе выдается ошибка, но - 2012.29.04 разберет без проблем...

Что вам нужно-то?? Свой код дописать? Для себя данные вытянуть?
8 июл 13, 18:54    [14538175]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
ADVO
Member

Откуда:
Сообщений: 39
Cygapb-007
Мягко говоря, странная ситуация...
Код править нельзя, передаваемые данные править нельзя, в запросе выдается ошибка, но - 2012.29.04 разберет без проблем...
Что вам нужно-то?? Свой код дописать? Для себя данные вытянуть?

Нужно чтоб эти запросы заработали
select CAST('2012-04-29' as smalldatetime)
select CAST('29-04-2012' as smalldatetime)
select CAST('29.04.2012' as smalldatetime)
select @@LANGUAGE

Сейчас первый выдает ошибку.
8 июл 13, 18:59    [14538191]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
ADVO
Нужно чтоб эти запросы заработали
еще раз - для чего нужно?
8 июл 13, 19:11    [14538225]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
ADVO
Member

Откуда:
Сообщений: 39
Cygapb-007
ADVO
Нужно чтоб эти запросы заработали
еще раз - для чего нужно?

Чтоб сервер принимал оба варианта даты.
Потому что встречаются оба варианта, код править крайне нежелательно.
8 июл 13, 19:19    [14538243]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
ADVO
Нужно чтоб эти запросы заработали
select CAST('2012-04-29' as smalldatetime)
select CAST('29-04-2012' as smalldatetime)
select CAST('29.04.2012' as smalldatetime)
select @@LANGUAGE

Сейчас первый выдает ошибку.

для первого нужно set dateformat ymd (mdy) или соответствующий язык
для второго и третьего - set dateformat ydm (dmy)
одновременно не получится
8 июл 13, 19:22    [14538252]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
ADVO
Member

Откуда:
Сообщений: 39
Shakill
для первого нужно set dateformat ymd (mdy) или соответствующий язык
для второго и третьего - set dateformat ydm (dmy)
одновременно не получится

Я правильно понимаю алгоритм - второй,третий находит по маске Windows для русской локали (dd.mm.yyyy).
А то что не находит - применяет us_english с маской mdy?
8 июл 13, 19:26    [14538260]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
ADVO
Shakill
для первого нужно set dateformat ymd (mdy) или соответствующий язык
для второго и третьего - set dateformat ydm (dmy)
одновременно не получится

Я правильно понимаю алгоритм - второй,третий находит по маске Windows для русской локали (dd.mm.yyyy).
А то что не находит - применяет us_english с маской mdy?

для конвертации в smalldatetime проверяется соответствие строки текущей настройке dateformat. если строка не соответствует этой настройке или виду YYYYMMDD, сервер выдает ошибку
8 июл 13, 19:36    [14538285]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
ADVO
Member

Откуда:
Сообщений: 39
Shakill
для конвертации в smalldatetime проверяется соответствие строки текущей настройке dateformat. если строка не соответствует этой настройке или виду YYYYMMDD, сервер выдает ошибку
Тогда бы
select CAST('2012-29-04' as smalldatetime)
не работал. А он работает.
8 июл 13, 19:46    [14538306]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
ADVO
Я правильно понимаю алгоритм - второй,третий находит по маске Windows для русской локали (dd.mm.yyyy).
А то что не находит - применяет us_english с маской mdy?
неправильно:
set dateformat ymd
print convert(smalldatetime,'2012-04-29')
print convert(smalldatetime,'04.29.2012')
print convert(smalldatetime,'04-29-2012')
set dateformat ydm
print convert(smalldatetime,'2012-29-04')
print convert(smalldatetime,'29-04-2012')
print convert(smalldatetime,'29.04.2012')
В таком виде отрабатывает без ошибок, при отмене любого set dateformat выдает ошибку в отмененном пакете (на первый или второй запуск)
8 июл 13, 20:43    [14538462]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
ADVO
Member

Откуда:
Сообщений: 39
Это я понял - все логично, указываем явно формат, выводим соответствующий.
set dateformat ymd
print convert(smalldatetime,'2012-04-29')
set dateformat ydm
print convert(smalldatetime,'2012-29-04')

А вот тут у меня мозг поплыл:
set dateformat ymd
print convert(smalldatetime,'04.29.2012')
print convert(smalldatetime,'04-29-2012')
set dateformat ydm
print convert(smalldatetime,'29-04-2012')
print convert(smalldatetime,'29.04.2012')

Указываем день крайним, а ставим в центр.
Ниже наоборот.
Объясните пожалуйста.
9 июл 13, 00:03    [14538863]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
ADVO
Объясните пожалуйста.
Это к терапевту разработчику :)
9 июл 13, 00:05    [14538869]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
ADVO
Member

Откуда:
Сообщений: 39
Cygapb-007
ADVO
Объясните пожалуйста.
Это к терапевту разработчику :)

Есть бредовое предположение)
set dateformat ymd
print convert(smalldatetime,'04.29.2012')
print convert(smalldatetime,'04-29-2012')
Т.к по указанной маске ymd дата не проходит, и формат не полный ISO, но видно где год 4-х значный, сервер переставляет этот год под заданную маску, т.е. первым.
Тогда сходится Картинка с другого сайта.
9 июл 13, 00:29    [14538913]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
ADVO
Member

Откуда:
Сообщений: 39
ADVO
Раз 2012.29.04 разберет без проблем, то где-то заложен подобный формат.

Тогда и это сходится.
Получается если прописан русский, ищет по нему маску, находит dmy.
И имеем то же, что
set dateformat dmy
print convert(smalldatetime,'2012.29.04')
По маске уже не прошел, год захватил, поставил по маске в конец и получается 29.04.2012.
9 июл 13, 00:44    [14538935]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
ADVO,

У логина, под которым работает ваш высеченный из камня софт, поставьте дефолтный язык русский.
9 июл 13, 04:53    [14539014]     Ответить | Цитировать Сообщить модератору
 Re: формат даты - зависимость от региональных настроек  [new]
ADVO
Member

Откуда:
Сообщений: 39
Ennor Tiegael
ADVO,
У логина, под которым работает ваш высеченный из камня софт, поставьте дефолтный язык русский.
С самого начала настроен был для всех русский.
Дело даже не в софте, я запускал в QA, @@LANGUAGE показывал русский.
9 июл 13, 09:59    [14539511]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить