0

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

谢谢你尽你所能的帮助

4

2 回答 2

4

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

Interbase 没有内置的子字符串函数,但它确实有一个UDF调用的(用户定义的函数)SUBSTRlib_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

——杰伦

于 2011-02-17T20:53:10.563 回答
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'
于 2011-02-17T19:35:48.977 回答