Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / формат даты - зависимость от региональных настроек / 24 сообщений из 24, страница 1 из 1
08.07.2013, 18:07
    #38324588
ADVO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
Здравствуйте.
Подскажите куда копать.
Windows server 2008, MSSQL 2008

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


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

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

Без Set dateformat[src], Cast, Convert и без универсальной записи YYYYMMDD.
...
Рейтинг: 0 / 0
08.07.2013, 18:19
    #38324610
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
ADVO, поясните, что значит "хочу, чтобы работал запрос с CAST, но без CAST"?
И зачем эти ограничения?
...
Рейтинг: 0 / 0
08.07.2013, 18:25
    #38324621
Гость333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
ADVOБез Set dateformat[src], Cast, Convert и без универсальной записи YYYYMMDD.
Mission: impossible.
...
Рейтинг: 0 / 0
08.07.2013, 18:28
    #38324628
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
ADVO,
Если желание вызвано способом хранения дат в таблице, то вполне подойдет
Код: sql
1.
select CAST(REPLACE('2012.04.29','.','') as smalldatetime)


ADVOБез Set dateformat[src], Cast, Convert и без универсальной записи YYYYMMDD. во всяком случае, явного YYYYMMDD нет :)
...
Рейтинг: 0 / 0
08.07.2013, 18:30
    #38324631
ADVO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
Cast для примера, что на формат ругнется.
Причина проста - нельзя править код, т.е. только серверные настройки.
...
Рейтинг: 0 / 0
08.07.2013, 18:33
    #38324636
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
ADVO, передаваемые данные тоже нельзя править? Настройками проблема не решается.
...
Рейтинг: 0 / 0
08.07.2013, 18:39
    #38324645
ADVO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
MinamotoADVO, передаваемые данные тоже нельзя править? Настройками проблема не решается.
Да, передаваемые данные нельзя править.
Раз 2012.29.04 разберет без проблем, то где-то заложен подобный формат.
Вот только где?
...
Рейтинг: 0 / 0
08.07.2013, 18:46
    #38324659
Гость333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
ADVOгде-то заложен подобный формат.
Вот только где?
Надо полагать, заложен разработчиками Microsoft в исходные коды SQL Server'а.
...
Рейтинг: 0 / 0
08.07.2013, 18:53
    #38324666
ADVO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
Гость333ADVOгде-то заложен подобный формат.
Вот только где?
Надо полагать, заложен разработчиками Microsoft в исходные коды SQL Server'а.
Код: sql
1.
2.
3.
4.
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, выбранной локали.
Но почему первый вариант упорно впихивает день после года. Вот что мне непонятно.
...
Рейтинг: 0 / 0
08.07.2013, 18:54
    #38324667
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
Мягко говоря, странная ситуация...
Код править нельзя, передаваемые данные править нельзя, в запросе выдается ошибка, но - 2012.29.04 разберет без проблем...

Что вам нужно-то?? Свой код дописать? Для себя данные вытянуть?
...
Рейтинг: 0 / 0
08.07.2013, 18:59
    #38324674
ADVO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
Cygapb-007Мягко говоря, странная ситуация...
Код править нельзя, передаваемые данные править нельзя, в запросе выдается ошибка, но - 2012.29.04 разберет без проблем...
Что вам нужно-то?? Свой код дописать? Для себя данные вытянуть?
Нужно чтоб эти запросы заработали
Код: sql
1.
2.
3.
4.
select CAST('2012-04-29' as smalldatetime)
select CAST('29-04-2012' as smalldatetime)
select CAST('29.04.2012' as smalldatetime)
select @@LANGUAGE


Сейчас первый выдает ошибку.
...
Рейтинг: 0 / 0
08.07.2013, 19:11
    #38324691
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
ADVOНужно чтоб эти запросы заработалиеще раз - для чего нужно?
...
Рейтинг: 0 / 0
08.07.2013, 19:19
    #38324699
ADVO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
Cygapb-007ADVOНужно чтоб эти запросы заработалиеще раз - для чего нужно?
Чтоб сервер принимал оба варианта даты.
Потому что встречаются оба варианта, код править крайне нежелательно.
...
Рейтинг: 0 / 0
08.07.2013, 19:22
    #38324705
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
ADVOНужно чтоб эти запросы заработали
Код: sql
1.
2.
3.
4.
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)
одновременно не получится
...
Рейтинг: 0 / 0
08.07.2013, 19:26
    #38324708
ADVO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
Shakillдля первого нужно set dateformat ymd (mdy) или соответствующий язык
для второго и третьего - set dateformat ydm (dmy)
одновременно не получится
Я правильно понимаю алгоритм - второй,третий находит по маске Windows для русской локали (dd.mm.yyyy).
А то что не находит - применяет us_english с маской mdy?
...
Рейтинг: 0 / 0
08.07.2013, 19:36
    #38324717
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
ADVOShakillдля первого нужно set dateformat ymd (mdy) или соответствующий язык
для второго и третьего - set dateformat ydm (dmy)
одновременно не получится
Я правильно понимаю алгоритм - второй,третий находит по маске Windows для русской локали (dd.mm.yyyy).
А то что не находит - применяет us_english с маской mdy?
для конвертации в smalldatetime проверяется соответствие строки текущей настройке dateformat. если строка не соответствует этой настройке или виду YYYYMMDD, сервер выдает ошибку
...
Рейтинг: 0 / 0
08.07.2013, 19:46
    #38324724
ADVO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
Shakillдля конвертации в smalldatetime проверяется соответствие строки текущей настройке dateformat. если строка не соответствует этой настройке или виду YYYYMMDD, сервер выдает ошибкуТогда бы
Код: sql
1.
select CAST('2012-29-04' as smalldatetime)

не работал. А он работает.
...
Рейтинг: 0 / 0
08.07.2013, 20:43
    #38324772
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
ADVOЯ правильно понимаю алгоритм - второй,третий находит по маске Windows для русской локали (dd.mm.yyyy).
А то что не находит - применяет us_english с маской mdy?неправильно:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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 выдает ошибку в отмененном пакете (на первый или второй запуск)
...
Рейтинг: 0 / 0
09.07.2013, 00:03
    #38324887
ADVO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
Это я понял - все логично, указываем явно формат, выводим соответствующий.
Код: sql
1.
2.
3.
4.
set dateformat ymd
print convert(smalldatetime,'2012-04-29')
set dateformat ydm
print convert(smalldatetime,'2012-29-04')


А вот тут у меня мозг поплыл:
Код: sql
1.
2.
3.
4.
5.
6.
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')


Указываем день крайним, а ставим в центр.
Ниже наоборот.
Объясните пожалуйста.
...
Рейтинг: 0 / 0
09.07.2013, 00:05
    #38324891
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
ADVOОбъясните пожалуйста.Это к терапевту разработчику :)
...
Рейтинг: 0 / 0
09.07.2013, 00:29
    #38324905
ADVO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
Cygapb-007ADVOОбъясните пожалуйста.Это к терапевту разработчику :)
Есть бредовое предположение)
Код: sql
1.
2.
3.
set dateformat ymd
print convert(smalldatetime,'04.29.2012')
print convert(smalldatetime,'04-29-2012')

Т.к по указанной маске ymd дата не проходит, и формат не полный ISO, но видно где год 4-х значный, сервер переставляет этот год под заданную маску, т.е. первым.
Тогда сходится
...
Рейтинг: 0 / 0
09.07.2013, 00:44
    #38324911
ADVO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
ADVOРаз 2012.29.04 разберет без проблем, то где-то заложен подобный формат.

Тогда и это сходится.
Получается если прописан русский, ищет по нему маску, находит dmy.
И имеем то же, что
Код: sql
1.
2.
set dateformat dmy
print convert(smalldatetime,'2012.29.04')

По маске уже не прошел, год захватил, поставил по маске в конец и получается 29.04.2012.
...
Рейтинг: 0 / 0
09.07.2013, 04:53
    #38324945
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
ADVO,

У логина, под которым работает ваш высеченный из камня софт, поставьте дефолтный язык русский.
...
Рейтинг: 0 / 0
09.07.2013, 09:59
    #38325045
ADVO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
формат даты - зависимость от региональных настроек
Ennor TiegaelADVO,
У логина, под которым работает ваш высеченный из камня софт, поставьте дефолтный язык русский. С самого начала настроен был для всех русский.
Дело даже не в софте, я запускал в QA, @@LANGUAGE показывал русский.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / формат даты - зависимость от региональных настроек / 24 сообщений из 24, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]