2011-02-17 101 views
0

我有一個zipcode存儲在文本字段(字符串),並希望只選擇我的select語句中的值的最後3位數字。這可能嗎?有沒有這樣做的標準方式,以便SQL可以跨數據庫互換?我會在生產環節上的Oracle使用它,但我對Interbase的測試(是的,是的,我知道,兩個完全差異的DB,但多數民衆贊成我在做什麼)SQL提取部分字符串

感謝您的幫助,您可以提供

+2

沒有可以在Oracle和Interbase – RichardTheKiwi 2011-02-17 19:55:50

回答

4

假設郵編都具有相同的長度,你可以使用substr
如果它們不具有相同的長度,則必須使用strlen函數執行類似的操作。

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

您聲明UDF這樣的:在lib_udf.dll是這樣工作的

Interbase的沒有一個內置的子功能,但它確實有一個UDF(用戶定義函數)稱爲SUBSTR

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

甲骨文確實有一個內置的功能SUBSTR你使用這樣的:

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

- jeroen

2

這取決於您如何存儲郵政編碼。如果您僅使用5位數字 那麼這應該適用於Oracle,並且可能適用於Interbase。

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

如果存儲郵編+ 4和你想要的最後3位數字,有些是5位數字,有些是9位數字,你就必須做到以下幾點。可以在兩個數據庫更好地工作

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

,一個選項是

+0

上使用相同代碼的子字符串/右命令,沒有where子句。每個記錄都有一個zip文件,因此,我需要每個文件的最後三個字符。還有一個可以在兩個數據庫中工作。感謝名單! – IElite 2011-02-17 19:44:58