我有一个存储在文本字段(字符串)中的邮政编码,并且想在我的选择语句中只选择值的最后 3 位数字。这可能吗?是否有这样做的标准方法,以便 SQL 可以跨数据库互换?我将在 Oracle 上的生产中使用它,但我在 Interbase 上进行测试(是的,是的,我知道,两个完全不同的数据库,但这就是我正在做的)
谢谢你尽你所能的帮助
假设邮政编码都具有相同的长度,您可以使用substr
.
如果它们的长度不同,则必须对strlen
函数执行类似的操作。
Interbase 没有内置的子字符串函数,但它确实有一个UDF
调用的(用户定义的函数)SUBSTR
,lib_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
——杰伦
这取决于您存储邮政编码的方式。如果您只使用 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'