SQL: альтернатива to_char для Oracle И SQL-Server

У меня есть несколько операторов sql, которые я использую для Oracle. Эти операторы sql используются программой от меня. Я хочу поддерживать Oracle и SQL-Server с помощью своей программы, не имея разных инструкций sql для Oracle и SQL-Server.

Какую альтернативу я могу использовать для конкретных операторов SQL Oracle:

  • to_char(ИМЯ ПОЛЯ, 'ГГГГ')
  • to_char(ИМЯ ПОЛЯ, 'ГГГГММДД')
  • to_char(ИМЯ ПОЛЯ, 'ДД.ММ.ГГГГ')

Операторы sql должны работать для Oracle и SQL-Server.


person Dennis F.    schedule 10.11.2015    source источник
comment
Выберите даты как даты из ваших баз данных и отформатируйте их с помощью кода приложения.   -  person Dan Bracuk    schedule 10.11.2015
comment
Если вам нужна такая функция, вам нужно написать ее самостоятельно. Но даже в этом случае вы не можете использовать один и тот же синтаксис для обеих СУБД, поскольку SQL Server всегда требует полных имен функций (например, select dbo.my_tochar(...) ..), тогда как в Oracle это не требуется (и обычно у вас нет схема dbo только для функций). Другой вариант — определить представление, которое возвращает отформатированную дату, используя специальные функции СУБД.   -  person a_horse_with_no_name    schedule 10.11.2015


Ответы (3)


Даже если на первый взгляд реализация SQL от двух разных поставщиков выглядит одинаково, при работе с реальными корпоративными приложениями вы наткнетесь на большое количество различий, и я говорю только о SQL, сравнивая PL/SQL с T-SQL. почти не осталось сходства.

Пытаясь сократить использование двух баз данных только до общей функциональности, вы потеряете большую часть их мощности, вы также можете использовать txt-файл в файловой системе.

Одним из элегантных решений, как кто-то уже предложил, было бы оставить столбцы в базе данных как тип данных DATE и извлечь ваши данные в код приложения, который стоит над базой данных, если таковые имеются. Например, в Java вы сопоставите столбцы DATE базы данных с java.sql.Date независимо от того, исходит ли эта дата от Oracle или от SQL Server.

Тем не менее, если вы хотите получить отформатированные данные из базы данных, вы можете создать отдельные столбцы, содержащие отформатированную дату, например:

ИМЯ ПОЛЯ | FIELDNAME_YYYY | FIELDNAME_ГГГГММДД | FIELDNAME_DDMMYYYY

person Emil Moise    schedule 10.11.2015
comment
Программа представляет собой интерфейс. Так что мое решение установить формат ввода отлично работает для меня. Интерфейс только собирает данные и записывает их в выходной файл. - person Dennis F.; 10.11.2015

Я не думаю, что есть общие функции, чтобы делать то, что вы хотите. Oracle поддерживает функцию extract() стандарта ANSI для извлечения частей даты. SQL Server имеет отдельные функции для YEAR(), MONTH() и DAY(). Oracle использует TO_CHAR(); SQL Server использует CONVERT().

Один из вариантов — определить функции YEAR(), MONTH() и DAY() в Oracle, а затем использовать функцию конкатенации строк (через CONCAT()) для объединения данных. Или напишите определенные функции в каждой базе данных для того, что вы хотите сделать. Или, возможно, кто-то внедрил TO_CHAR() в SQL Server, и вы можете взять код из Интернета.

person Gordon Linoff    schedule 10.11.2015

Наконец я нашел решение. Может быть, это полезно и для некоторых других людей.

Вы можете установить формат ввода для даты...

Oracle: ALTER SESSION SET NLS_DATE_FORMAT = 'DD.MM.YYYY' SQL-сервер: SET DATEFORMAT dmy

person Dennis F.    schedule 10.11.2015