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

Откуда:
Сообщений: 76
Как получить системную информацию о региональном формате даты и "собрать" необходиму дату, например '29.12.2005' в соответствии с этими настройками?
16 июн 09, 16:41    [7306144]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
проходящий.
Guest
user.C
Как получить системную информацию о региональном формате даты и "собрать" необходиму дату, например '29.12.2005' в соответствии с этими настройками?
А зачем? Если можно "собрать" в одном, не зависящим от настроек виде? '20051229'
16 июн 09, 16:44    [7306162]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
GSerg
Member

Откуда: Магадан
Сообщений: 205
Это задача для клиента. На сервере такой потребности не возникает. Если возникает, значит что-то делаете не так. Что именно делаете?
16 июн 09, 16:45    [7306166]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
iljy
Guest
user.C,
select dateadd(day, 29 - 1, dateadd(month, 12 - 1, dateadd(year, 2005 - 1900, 0)))

вам вообще что нужно? задача как ставится?
16 июн 09, 16:47    [7306180]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
user.C,

под региональными настройками Вы подразумеваете порядок день/месяц/год (DATEFORMAT) на сервере?
16 июн 09, 16:54    [7306235]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
user.C
Member

Откуда:
Сообщений: 76
Суть в следующем. Есть таблички с ХП в БД, которые сделаны давно и далеко.
В ХП производится логическое сравнение входной даты (datetime) c '2005-01-01 08:00:00'.
delete from Table1 where StartTime<'2005-01-01 08:00:00' 
StartTime - datetime
Тут все и вываливается, т.к. '2005-01-01 08:00:00' это YYYY-dd-mm.
Предполагаю:
1. Узнать региональные настройки при запуске ХП
2. Собрать эту дату.
Собственно, в Борланде так всегда и делаю (API), как в SQL не знаю.
Дату/время всегда передаю в запросах через параметры как datetime.
16 июн 09, 17:00    [7306287]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
user.C
Member

Откуда:
Сообщений: 76
iap,
Да, порядок и разделители. + формат времени
16 июн 09, 17:01    [7306298]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
проходящий.
Guest
user.C
т.к. '2005-01-01 08:00:00' это YYYY-dd-mm.
И можно увидеть обоснование сего утверждения?
16 июн 09, 17:02    [7306315]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
iljy
Guest
user.C,

не понял.... если вы ее как параметр datetime передаете - при чем тут региональный формат ?? а если как строку - используйте универсальный '20051224', вам же предложили! или на клиенте собрать такую строку - проблема?
и кстати, 2005-01-01 - симметрична по отношению к мм-дд или дд-мм
16 июн 09, 17:05    [7306344]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
user.C
Member

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

ХП, см. ниже.
В вашем примере получаем '2005-12-29 00:00:00.000'. А в региональных настройках у меня сейчас дд.ММ.уууу.
16 июн 09, 17:05    [7306345]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
iljy
Guest
user.C,

в моем примере получаем 29 декабря 2005 года, 0 часов 0 минут и так далее. то, что вы написали - результат преобразования даты в строку. и мне не понятно, в какой момент (а главное - зачем!) вы делаете это преобразование
16 июн 09, 17:07    [7306367]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
Glory
Member

Откуда:
Сообщений: 104760
user.C
iljy,

ХП, см. ниже.
В вашем примере получаем '2005-12-29 00:00:00.000'. А в региональных настройках у меня сейчас дд.ММ.уууу.

Правила преобразования сервером строковых констант в дату не зависит о региональных настроек ни сервера, ни клиента.
А зависят от текущего language коннекта и установки set dateformat
16 июн 09, 17:07    [7306371]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
user.C
Member

Откуда:
Сообщений: 76
проходящий.,
К сожалению - это просто факт. Поэтому ИХ программа понимает дд и мм до 12 на нашем компе и наших настройках, затем уходит в аут.
16 июн 09, 17:08    [7306372]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
user.C,

будете текст процедуры переделывать?
Тогда просто замените то, что показали, на одну из инвариантных записей:
'YYYY-MM-DDThh:mm:ss.mmm' (126-й стиль CONVERT, стандарт ISO) или
'YYYYMMDD hh:mm:ss.mmm'
Эти форматы не зависят от региональных и прочих настроек.
SQL сервер понимает эти строки как DATETIME без явного конвертирования.
16 июн 09, 17:08    [7306376]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
проходящий.
Guest
user.C
iljy,

ХП, см. ниже.
В вашем примере получаем '2005-12-29 00:00:00.000'. А в региональных настройках у меня сейчас дд.ММ.уууу.
Серверу пофиг ваши региональные настройки. Показанный формат однозначен для сервера. Не ищите кошку там, где ее нет.
16 июн 09, 17:09    [7306385]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Glory
user.C
iljy,

ХП, см. ниже.
В вашем примере получаем '2005-12-29 00:00:00.000'. А в региональных настройках у меня сейчас дд.ММ.уууу.

Правила преобразования сервером строковых констант в дату не зависит о региональных настроек ни сервера, ни клиента.
А зависят от текущего language коннекта и установки set dateformat
Не знаю, чем поможет знание текущего DATEFORMAT. Но если надо - вот тут обсуждали
Например:
SELECT STUFF(STUFF(STUFF('___',F%10,1,'D'),F/100%10,1,'M'),F/10000,1,'Y')
FROM (SELECT CONVERT(CHAR, CAST('1/2/3' AS DATETIME),12)) D(F)
16 июн 09, 17:11    [7306406]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
проходящий.
Guest
user.C
проходящий.,
К сожалению - это просто факт. Поэтому ИХ программа понимает дд и мм до 12 на нашем компе и наших настройках, затем уходит в аут.
Недоказанное - не факт, а предположение. Если оно и выглядит так, то это совсем не значит, что так и есть на самом деле. В цирке все видели как распиливают девушку, но все знают, что на самом деле никакого распиливания нет.
16 июн 09, 17:12    [7306417]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
user.C
Member

Откуда:
Сообщений: 76
проходящий.,
Это информация от авторов: Великих Китайских Писателей. Они дату/время любят строкой передавать.
А фактом является то, что на их местных компах это работает (разумеется).
16 июн 09, 17:18    [7306459]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
iljy
Guest
user.C,

тогда передавайте в универсальном формате, не зависящем от настроек. вам это решение одним из первых предложили, чем не устроило-то?
16 июн 09, 17:20    [7306484]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
user.C
проходящий.,
Это информация от авторов: Великих Китайских Писателей. Они дату/время любят строкой передавать.
А фактом является то, что на их местных компах это работает (разумеется).
Но как же Вы узнаете, сидя внутри серверной процедуры, на каком месте в строковом параметре стоит день,
а на каком - месяц? Особенно, если и то, и другое меньше 13?
Это же невозможно даже теоретически. IMHO
16 июн 09, 17:23    [7306508]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
user.C
Member

Откуда:
Сообщений: 76
iljy,
Уже в работе ... проверяю.
16 июн 09, 17:23    [7306509]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
user.C
Member

Откуда:
Сообщений: 76
iap
user.C
проходящий.,
Это информация от авторов: Великих Китайских Писателей. Они дату/время любят строкой передавать.
А фактом является то, что на их местных компах это работает (разумеется).
Но как же Вы узнаете, сидя внутри серверной процедуры, на каком месте в строковом параметре стоит день,
а на каком - месяц? Особенно, если и то, и другое меньше 13?
Это же невозможно даже теоретически. IMHO

Здесь, к счастью, datetime передается, а сравнивается именно с '2005-01-01 08:00:00'
16 июн 09, 17:25    [7306533]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
iljy
Guest
user.C

Здесь, к счастью, datetime передается, а сравнивается именно с '2005-01-01 08:00:00'

так. давайте разберемся. у вас есть процедура, в которой прописана такая фигня? и вы не можете поменять ее текст? или вам из программы такое приходит? вы собственно с какой стороны пишете - на клиенте или на сервере?
'2005-01-01' - симметричен по мм и дд, так что преобраховываться должен без проблем по любому.
16 июн 09, 17:29    [7306570]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
user.C
Member

Откуда:
Сообщений: 76
iap
user.C,

будете текст процедуры переделывать?
Тогда просто замените то, что показали, на одну из инвариантных записей:
'YYYY-MM-DDThh:mm:ss.mmm' (126-й стиль CONVERT, стандарт ISO) или
'YYYYMMDD hh:mm:ss.mmm'
Эти форматы не зависят от региональных и прочих настроек.
SQL сервер понимает эти строки как DATETIME без явного конвертирования.

'YYYY-MM-DDThh:mm:ss.mmm' как я понимаю строка?
16 июн 09, 17:30    [7306573]     Ответить | Цитировать Сообщить модератору
 Re: Как получить системную информацию о региональном формате даты  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
user.C
iap
user.C,

будете текст процедуры переделывать?
Тогда просто замените то, что показали, на одну из инвариантных записей:
'YYYY-MM-DDThh:mm:ss.mmm' (126-й стиль CONVERT, стандарт ISO) или
'YYYYMMDD hh:mm:ss.mmm'
Эти форматы не зависят от региональных и прочих настроек.
SQL сервер понимает эти строки как DATETIME без явного конвертирования.

'YYYY-MM-DDThh:mm:ss.mmm' как я понимаю строка?
Вам же говорят, есть несколко видов строк, в которых год, месяц, день стоят на вполне определённых местах.
Их форматы описаны в стандартах.
Но строка, которую Вы нам показали в качестве примера, такой "однозначной" не является,
хотя в частном случае месяц=день всё будет работать "на ура".
16 июн 09, 17:37    [7306624]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить