SQL 提取字符串的一部分

发布于 2024-10-18 02:16:05 字数 179 浏览 2 评论 0原文

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

感谢您提供的任何帮助

I have a zipcode stored in a text field (string) and would like to select only the last 3 digits of the value in my select statement. is this possible? Is there a standard way of doing this so that the SQL is interchangeable accross databases? I will be using it in production on Oracle, but i test on Interbase (yes, yes, i know, two totally diff DBs, but thats what i am doing)

thanks for any help you can offer

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小姐丶请自重 2024-10-25 02:16:05

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

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

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

--jeroen

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

动听の歌 2024-10-25 02:16:05

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

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'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文