powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / общий формат дыты в запросе для работы с разными серверами
19 сообщений из 19, страница 1 из 1
общий формат дыты в запросе для работы с разными серверами
    #33626118
FILINSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, есть приложение, которое может работать с разными SQL серверами(Interbase/Firebird, MSSQL, DB2, Oracle) (через свои обертки). Запросы формируются в текстовой форме и потом выполняются (т.е. через параметры не вариант). Нужно как-то работать с датой, чтоб все сервера понимали. Т.е. запрос типа

"select * from MyTable where (Date < '10.05.2005')"

чтоб выполнялся на всех серверах нормально вне зависимости ни от локали ни от чего. С MSSQL в этом отношении, как я понял, проблем нет - YYYYMMDD формат рулит... А как дела с остальными ?

Перерыл интернет, пока такое впечатление, что како-го не зависимого от типа сервера и локали формата представления даты/времени нет. На дворе 21 век, куча стандартов, а сервера не реализовали у себя какой-то общий формат, независящий от локалей и т.п. ??? Не верю... Хотя не удивлюсь, если и так - каждый на себя тянет одеяло(хоть и ругают MS, но часто у них можно найти нужное а у других нет..).

Спасибо за помощь
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33627339
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FILINSQLHi, есть приложение, которое может работать с разными SQL серверами(Interbase/Firebird, MSSQL, DB2, Oracle) (через свои обертки). Запросы формируются в текстовой форме и потом выполняются (т.е. через параметры не вариант). Нужно как-то работать с датой, чтоб все сервера понимали. Т.е. запрос типа

"select * from MyTable where (Date < '10.05.2005')"

чтоб выполнялся на всех серверах нормально вне зависимости ни от локали ни от чего. С MSSQL в этом отношении, как я понял, проблем нет - YYYYMMDD формат рулит... А как дела с остальными ?

Перерыл интернет, пока такое впечатление, что како-го не зависимого от типа сервера и локали формата представления даты/времени нет. На дворе 21 век, куча стандартов, а сервера не реализовали у себя какой-то общий формат, независящий от локалей и т.п. ??? Не верю... Хотя не удивлюсь, если и так - каждый на себя тянет одеяло(хоть и ругают MS, но часто у них можно найти нужное а у других нет..).

Спасибо за помощь
У меня в Oracle приведенный запрос:

select * from MyTable where (Date < '10.05.2005')

сработал без проблем... Причем именно в таком написании... Хотя есть, конечно, всякие функции преобразования, например, TO_DATE()...
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33627402
pavelvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через какой интерфейс работаете? В ODBC и OLEDB для этого предусмотрены специальные escape-последовательности типа:
Код: plaintext
1.
2.
3.
{d 'value'}
{t 'value'}
{ts 'value'}
Также предусмотрены ESC-последовательности для GUID, интервальных литералов, для LIKE, внешних соединений, скалярных функций и процедур.
Правда не все их поддерживают в полном объёме, но уж для дат точно должно работать.
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33628142
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FILINSQLчтоб выполнялся на всех серверах нормально вне зависимости ни от локали ни от чего. С MSSQL в этом отношении, как я понял, проблем нет - YYYYMMDD формат рулит... А как дела с остальными ?
Попробуй и узнаешь :)
Чаще всего прокатывает формат YYYY-MM-DD.
В конце концов, твой клиент может иметь у себя специальную настройку для какой базы какой формат использовать.
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33632826
FILINSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав C.
У меня в Oracle приведенный запрос:

select * from MyTable where (Date < '10.05.2005')

сработал без проблем... Причем именно в таком написании... Хотя есть, конечно, всякие функции преобразования, например, TO_DATE()...

Я привел этот селект как пояснение. То, что у вас все ОК, скорее всего значит что локаль на сервере совпадает с тем, что вы написали. Правда сервак ИМХО может принять эту дату и как 10 мая так и 5 октября(в сша по-моемому дни и месяцы не так как у нас)



pavelvpЧерез какой интерфейс работаете? В ODBC и OLEDB для этого предусмотрены специальные escape-последовательности типа:

{d 'value'}
{t 'value'}
{ts 'value'}

Также предусмотрены ESC-последовательности для GUID, интервальных литералов, для LIKE, внешних соединений, скалярных функций и процедур.
Правда не все их поддерживают в полном объёме, но уж для дат точно должно работать.

В том то и дело, что ищу "общий" стандарт.. если он есть конечно. Для коннекта с конкретным сервером может использоваться что угодно (напр. для MSSQL OLEDB, а для Oracle какие-нибудь родные компоненты, а для Interbase/Firebird тоже свои какие-нить. Мне многого не нужно. Мне не нужно выполнять какие-то хитрые запросы. Элементарные select, insert, update. Все. Я знаю, что выполнив
slect name from table
я получу результат с любого сервера.. но вот с датой - лажа получается.



White OwlПопробуй и узнаешь :)
Чаще всего прокатывает формат YYYY-MM-DD.
В конце концов, твой клиент может иметь у себя специальную настройку для какой базы какой формат использовать.

А "чаще" это как ? На чем не прокатывает ? Чтоб попробовать нужно наставить всех серваков и играться с локалями на каждом. Хотелось вот у знающих людей поспрашать сначала... Хотя че-то по откликам люди тоже не в курсе...

Не уж то я такой особенный и хочу чего-то непонятного :-)
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33633016
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме Oracle других не знаю, но в Oracle единственная гарантия правильного восприятия - to_date('10.05.2005', 'dd.mm.yyyy'), остальное зависит от настроек
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33633092
FILINSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tru55Кроме Oracle других не знаю, но в Oracle единственная гарантия правильного восприятия - to_date('10.05.2005', 'dd.mm.yyyy'), остальное зависит от настроек

Скажите, пожалуйста, а в Run-Time как-то можно для ораклавской сессии вначале задать формат передачи даты или нет ? (т.е. как в MSSQL например "SET DATEFORMAT dmy")
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33633096
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FILINSQL tru55Кроме Oracle других не знаю, но в Oracle единственная гарантия правильного восприятия - to_date('10.05.2005', 'dd.mm.yyyy'), остальное зависит от настроек

Скажите, пожалуйста, а в Run-Time как-то можно для ораклавской сессии вначале задать формат передачи даты или нет ? (т.е. как в MSSQL например "SET DATEFORMAT dmy")

ALTER SESSION SET NLS_DATE_FORMAT='dd.mm.yyyy'
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33633299
FILINSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tru55 FILINSQL tru55Кроме Oracle других не знаю, но в Oracle единственная гарантия правильного восприятия - to_date('10.05.2005', 'dd.mm.yyyy'), остальное зависит от настроек

Скажите, пожалуйста, а в Run-Time как-то можно для ораклавской сессии вначале задать формат передачи даты или нет ? (т.е. как в MSSQL например "SET DATEFORMAT dmy")

ALTER SESSION SET NLS_DATE_FORMAT='dd.mm.yyyy'

после этого можно со 100% гарантией передавать '10.05.2005' в качестве значения для date в sql запросе ?
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33633541
pavelvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FILINSQLВ том то и дело, что ищу "общий" стандарт.. если он есть конечно. ODBC или OLEDB не общий стандарт что ли?
Для коннекта с конкретным сервером может использоваться что угодно (напр. для MSSQL OLEDB, а для Oracle какие-нибудь родные компоненты, а для Interbase/Firebird тоже свои какие-нить. Мне многого не нужно. Мне не нужно выполнять какие-то хитрые запросы. Элементарные select, insert, update. Все. Я знаю, что выполнив
slect name from table
я получу результат с любого сервера.. но вот с датой - лажа получается.
...
Не уж то я такой особенный и хочу чего-то непонятного :-)
Повторяю ещё раз. Правильно написанное приложение, использующее в качестве интерфейса доступа ODBC или OLEDB, решит эти проблемы. Нужно соблюдать два правила:
1) в запросах использовать ESC-последовательности
2) данные получать не в строку, а в соответсвующий тип данных ODBC/OLEDB.
Это типы: SQL_TYPE_TIMESTAMP, SQL_TYPE_DATE, SQL_TYPE_TIME. Для этих типов определены соответствующие структуры данных: TIMESTAMP_STRUCT, DATE_STRUCT, TIME_STRUCT.
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33633617
FILINSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pavelvp FILINSQLВ том то и дело, что ищу "общий" стандарт.. если он есть конечно. ODBC или OLEDB не общий стандарт что ли?
Для коннекта с конкретным сервером может использоваться что угодно (напр. для MSSQL OLEDB, а для Oracle какие-нибудь родные компоненты, а для Interbase/Firebird тоже свои какие-нить. Мне многого не нужно. Мне не нужно выполнять какие-то хитрые запросы. Элементарные select, insert, update. Все. Я знаю, что выполнив
slect name from table
я получу результат с любого сервера.. но вот с датой - лажа получается.
...
Не уж то я такой особенный и хочу чего-то непонятного :-)
Повторяю ещё раз. Правильно написанное приложение, использующее в качестве интерфейса доступа ODBC или OLEDB, решит эти проблемы. Нужно соблюдать два правила:
1) в запросах использовать ESC-последовательности
2) данные получать не в строку, а в соответсвующий тип данных ODBC/OLEDB.
Это типы: SQL_TYPE_TIMESTAMP, SQL_TYPE_DATE, SQL_TYPE_TIME. Для этих типов определены соответствующие структуры данных: TIMESTAMP_STRUCT, DATE_STRUCT, TIME_STRUCT.

Кхм.. Спасибо, конечно, за комментарии... Но я тоже, повторяю еще раз : используются _разные_ технологии для коннекта к каждому конкретному серверу. Меня не нужно переубеждать в чем-то. То, что я спросил - то я и хотел узнать. Спасибо еще раз.
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33633714
pavelvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни в чём тебя переубеждать не собирался. Просто в твоём первом посте ты сетовал на:
авторПерерыл интернет, пока такое впечатление, что како-го не зависимого от типа сервера и локали формата представления даты/времени нет. На дворе 21 век, куча стандартов, а сервера не реализовали у себя какой-то общий формат, независящий от локалей и т.п. ??? Не верю... И я тебе ответил - правильно делаешь, что не веришь. Такие стандарты и форматы есть, и все нормальные серверы их поддерживают аж с прошлого века :-) Уж больше 10-ти лет как :-)
А то, что прикладуха об этом не знает, так это проблемы этой прикладухи, а не конкретного сервера. Вот это я и хотел сказать.
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33633749
FILINSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pavelvp...И я тебе ответил - правильно делаешь, что не веришь. Такие стандарты и форматы есть, и все нормальные серверы их поддерживают аж с прошлого века :-) Уж больше 10-ти лет как :-)
А то, что прикладуха об этом не знает, так это проблемы этой прикладухи, а не конкретного сервера. Вот это я и хотел сказать.

иными словами, могу ли я в элементарном запросе

select field1 from table1 where (datefiled < xxxxxx)

вместо xxxxxx написать такое представление даты, чтоб запрос корректно обрабатывался на всех(перечисленных) серверах вне зависимости от настроек локали на них?

Если да - то это и будет "поддерживают". А если нет, и я должен извращаться для такого элементарного запроса с какими-то спец. последовательностями зная тонкости интерфейса доступа (а если решим сменить интерфейс?)- то такая поддержка и гроша выеденного не стоит.

"Поддерживают" в моем понимании, это скажем когда все сервера понимают запись в четком виде yyyymmdd, или все сервера знают такой формат вне зависимости ни от чего yyyy-mm-dd. Все хочу ошибиться, но пока меня убеждают в обратном...
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33634105
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ANSI формат даты - YYYY-MM-DD -поддерживается всеми промышленными серверами БД.
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33634369
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
golsaANSI формат даты - YYYY-MM-DD -поддерживается всеми промышленными серверами БД.

Блин, что значит "поддерживается"? Если у меня текущая nls-установка 'dd.mm.yyyy', а я выдам '2006-03-30', благополучно получу ошибку (по крайней мере, в Oracle)
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33634377
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И, к слову сказать, в Oracle формат по умолчанию - DD-MON-YY, т.е. месяц - тремя буквами
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33634711
FILINSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tru55И, к слову сказать, в Oracle формат по умолчанию - DD-MON-YY, т.е. месяц - тремя буквами

ответьте, пожалуйста, на мой предыдущий вопрос о 100%-ти работы в случае установки формата для сессии
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33634723
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FILINSQL tru55И, к слову сказать, в Oracle формат по умолчанию - DD-MON-YY, т.е. месяц - тремя буквами

ответьте, пожалуйста, на мой предыдущий вопрос о 100%-ти работы в случае установки формата для сессии

Подтверждаю
...
Рейтинг: 0 / 0
общий формат дыты в запросе для работы с разными серверами
    #33634770
pavelvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FILINSQLЕсли да - то это и будет "поддерживают". А если нет, и я должен извращаться для такого элементарного запроса с какими-то спец. последовательностями зная тонкости интерфейса доступа (а если решим сменить интерфейс?)- то такая поддержка и гроша выеденного не стоит.
Это не какие-то спец. последовательности и тонкости интерфейса.
Это элементарные правила разботки приложений, если подразумевается возможность работы с несколькими различными СУБД.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / общий формат дыты в запросе для работы с разными серверами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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