SQL для извлечения части строки - PullRequest
0 голосов
/ 17 февраля 2011

У меня есть почтовый индекс, хранящийся в текстовом поле (строка), и я хотел бы выбрать только последние 3 цифры значения в моем операторе select. Это возможно? Есть ли стандартный способ сделать это так, чтобы SQL был взаимозаменяемым в разных базах данных? Я буду использовать его в производстве на Oracle, но я тестирую на Interbase (да, да, я знаю, две абсолютно разные БД, но это то, что я делаю)

спасибо за любую помощь, которую вы можете предложить

Ответы [ 2 ]

4 голосов
/ 17 февраля 2011

Предполагая, что все почтовые индексы имеют одинаковую длину, вы можете использовать substr.
Если они не имеют одинаковую длину, вы должны сделать аналогичные вещи с помощью функции strlen.

Interbase не имеет встроенной функции подстроки, но у него есть UDF (определяемая пользователем функция) с именем SUBSTR в lib_udf.dll, которая работает следующим образом:

select substr(clients.lastname, 1, 10)
from clients

Вы объявляете UDF следующим образом:

DECLARE EXTERNAL FUNCTION SUBSTR
    CSTRING(80),
    SMALLINT,
    SMALLINT
RETURNS CSTRING(80) FREE_IT
ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf';

В Oracle есть встроенная функция substr, которую вы используете следующим образом:

select substr(clients.lastname, 1, 10)
from clients

- Йерун

2 голосов
/ 17 февраля 2011

Это зависит от того, как вы храните почтовый индекс.Если вы используете только 5 цифр, то это должно работать для Oracle и может работать для Interbase.

select * from table where substr(zip,3,3) = '014'

ЕСЛИ вы храните Zip + 4 и вам нужны последние 3 цифры, некоторые из них 5 цифр, а некоторые 9цифры, которые вы должны сделать следующим образом.

select * from table where substr(zip,length(zip) -2,3) = '014'

и один вариант, который может работать лучше в обеих базах данных, это

select * from table where zip like '%014'
...