2015-11-10 17 views
0

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

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

  • to_char (FIELDNAME, 'YYYY')
  • to_char (FIELDNAME, 'YYYYMMDD')
  • to_char (FIELDNAME " ДД.ММ.ГГГГ ')

в SQL заявления должны работать для Oracle и SQL-Server.

+0

Выберите даты в качестве дат из своих баз данных и отформатируйте их с помощью кода приложения. –

+0

Если вы хотите такую ​​функцию, вам нужно написать ее самостоятельно. Но даже тогда вы не можете использовать один и тот же синтаксис для обеих СУБД, поскольку SQL Server _always_ требует полнофункциональных имен функций (например, 'select dbo.my_tochar (...) ..'), тогда как это не требуется в Oracle (и у вас обычно нет схемы 'dbo' только для функций). Другим вариантом является определение представления, которое возвращает форматированную дату с использованием конкретных функций СУБД. –

ответ

1

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

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

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

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

FIELDNAME | FIELDNAME_YYYY | FIELDNAME_YYYYMMDD | FIELDNAME_DDMMYYYY

+0

Программа - это интерфейс. Поэтому мое решение установить формат ввода работает отлично для меня. Интерфейс собирает только данные и записывает их в выходной файл. –

0

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

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

0

Наконец-то я нашел решение. Возможно, это полезно и другим людям.

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

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

Смежные вопросы