2011-02-17 102 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