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

感谢您可以提供的任何帮助

有帮助吗?

解决方案

Assuming the zipcodes all have the same length, you can use substr.
If they don't have the same length, you have to do similar things with the strlen function.

Interbase does not have a built-in substring function, but it does have a UDF (user defined function) called SUBSTR in lib_udf.dll that works like this:

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

You declare the UDF like this:

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

Oracle does have a built-in substr function that you use like this:

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

--jeroen

其他提示

This depends on how your storing the zip code. If you are using 5 digits only then this should work for Oracle and may work for Interbase.

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

IF you store Zip + 4 and you want the last 3 digits and some are 5 digits and some are 9 digits you would have to do the following.

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

and one option that may work better in both databases is

select * from table where zip like '%014'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top