Нейтральный оператор SQL платформы для INSTR или CHARINDEX - PullRequest
2 голосов
/ 12 февраля 2009

У меня проблема с написанием оператора SQL для сервера Oracle и MS SQL. Я хотел бы написать SQL, чтобы он работал в обоих. Я не хочу возиться с установкой переменной типа базы данных и переключением

У меня есть столбец имен курсов, которые имеют такие значения:

9RA923.2008W

1223,200710

P0033330.200901

Я хочу выбрать все справа от ".".

В оракуле я использую это:

SELECT substr(bom_course_id, instr(bom_course_id, '.')+1) FROM ...

В MSSQL Server я мог бы использовать это:

SELECT SUBSTRING(bom_course_id, CHARINDEX('.', bom_course_id)+1 ) FROM ...

Есть ли у кого-нибудь умный способ выбрать последние символы после точки, используя тот же оператор SQL в Oracle или MS SQL.

К сожалению, я не буду знать, сколько символов будет до или после "." Это тоже не совсем цифра, я не могу рассчитывать только на цифры.

Мне бы очень хотелось, чтобы существовал стандарт SQL.

Ответы [ 5 ]

1 голос
/ 13 февраля 2009

Глядя на эту ссылку , я не вижу стандартного способа добиться того, что вы хотите сделать.

ORACLE uses: INSTR
SQL SERVER uses: PATINDEX, CHARINDEX

ORACLE uses: SUBSTR
SQL SERVER uses: SUBSTRING

Я не мог придумать общий метод получения позиции персонажа.

A VIEW , вероятно, самый простой способ продолжить или сделать это в клиентском приложении .

1 голос
/ 13 февраля 2009

Рассматривали ли вы просто скрыть выбор в представлении базы данных? С точки зрения приложения, это будет простой, ванильный SELECT без функций, и все специфичные для базы данных данные останутся в базе данных.

Может не всем устраивать, но это идея.

0 голосов
/ 12 февраля 2009

Если ваши региональные настройки одинаковы для обеих баз данных, вы можете использовать

SELECT DISTINCT CAST(CAST(bom_course_id AS FLOAT) AS INTEGER)
0 голосов
/ 12 февраля 2009

Вы можете написать функцию Oracle с именем RIGHT, которая делает то же самое, что и SQL Server, и затем использовать ее в своем SQL.

Здесь является просто примером реализации.

РЕДАКТИРОВАТЬ: После прочтения вашего комментария, функция ПРАВА не будет действительно полезна в вашей ситуации. Затем вам нужно будет сопоставить соответствующие функции SQL Server с Oracle.

0 голосов
/ 12 февраля 2009

Можете ли вы привести его к числовому, а затем взять только десятичную часть?

...