首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于提取字符串部分的SQL

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

Stack Overflow用户
提问于 2011-02-18 03:30:15
回答 2查看 2.5K关注 0票数 0

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

感谢您能提供的任何帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-18 04:53:11

假设邮政编码都具有相同的长度,您可以使用substr

如果它们不具有相同的长度,则必须使用strlen函数执行类似的操作。

Interbase没有内置子字符串函数,但它在lib_udf.dll中有一个名为SUBSTRUDF (用户定义函数),其工作方式如下:

代码语言:javascript
复制
select substr(clients.lastname, 1, 10)
from clients

您可以这样声明UDF:

代码语言:javascript
复制
DECLARE EXTERNAL FUNCTION SUBSTR
    CSTRING(80),
    SMALLINT,
    SMALLINT
RETURNS CSTRING(80) FREE_IT
ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf';

Oracle有一个内置的substr函数,您可以像这样使用它:

代码语言:javascript
复制
select substr(clients.lastname, 1, 10)
from clients

--jeroen

票数 4
EN

Stack Overflow用户

发布于 2011-02-18 03:35:49

这取决于您存储邮政编码的方式。如果您只使用5位数,那么这应该适用于Oracle,也可能适用于Interbase。

代码语言:javascript
复制
select * from table where substr(zip,3,3) = '014'

如果你存储Zip +4,并且你想要最后3位数,有些是5位数,有些是9位数,你必须执行以下操作。

代码语言:javascript
复制
select * from table where substr(zip,length(zip) -2,3) = '014'

在这两个数据库中可能工作得更好的一个选项是

代码语言:javascript
复制
select * from table where zip like '%014'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5033616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档