用于字符串的提取部分的SQL

时间:2011-02-17 19:30:15

标签: sql oracle delphi interbase

我有一个存储在文本字段(字符串)中的邮政编码,并且只想在我的select语句中选择值的最后3位数字。这可能吗?是否有一种标准的方法可以使SQL在数据库中互换?我将在Oracle上使用它,但是我在Interbase上进行测试(是的,是的,我知道,两个完全不同的数据库,但这就是我正在做的事情)

感谢您提供的任何帮助

2 个答案:

答案 0 :(得分:4)

假设所有邮政编码长度相同,您可以使用substr 如果它们的长度不同,则必须使用strlen函数执行类似操作。

Interbase没有内置子字符串函数,但它在UDF中有一个名为SUBSTR的{​​{1}}(用户定义函数),其工作方式如下:

lib_udf.dll

您可以像这样声明UDF:

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

Oracle确实有一个你使用的内置substr函数:

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

- 的Jeroen

答案 1 :(得分:2)

这取决于您存储邮政编码的方式。如果您只使用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'