如何使用Oracle中的SQL中的REGEXP_SUBSTR将自定义消息替换为空插槽
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Oracle中的SQL中的REGEXP_SUBSTR将自定义消息替换为空插槽相关的知识,希望对你有一定的参考价值。
我有一个任务,我有一个“供应商”表,每个供应商都有一个描述。某些描述提供了电子邮件地址,而其他描述则没有。我需要显示提供的电子邮件,如果没有,我需要显示“没有提供电子邮件”。我很容易提取电子邮件地址,但我无法弄清楚如何用所请求的消息替换所有空插槽。
我尝试了几种,可能是非常错误的方法:
尝试1:
SELECT REGEXP_SUBSTR(description, '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}') OR 'No email provided' "Supplier emails" FROM suppliers;
尝试2 :(注意:我预计这不能正常工作但是由于缺乏其他想法而决定试一试)
SELECT REGEXP_SUBSTR(description, '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}') || 'No email provided' "Supplier emails" FROM suppliers;
尝试3:
SELECT REGEXP_SUBSTR(description, '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}', 'No email provided') "Supplier emails" FROM suppliers;
尝试4:
SELECT REGEXP_SUBSTR(description, '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}') "Supplier emails" FROM suppliers;
SELECT REPLACE('-', "No Email Provided") FROM suppliers;
我试着在谷歌上查看这个措辞的变化,而我的教科书并没有清楚地解释这个具体情况。
这是我正在使用的表,关于结果的上下文:
INSERT INTO suppliers
VALUES ('Second Hand Reads',
'wholesaler of used books only, located in Chicago, 634.555-8787');
INSERT INTO suppliers
VALUES ('Leftovers',
'Physical store location, located in Seattle, willing to fill referred sales, sales@leftovers.com');
INSERT INTO suppliers
VALUES ('Read Again',
'Chain of used book store fronts, seeking online sales partner, located in western U.S., 919-555-3333');
INSERT INTO suppliers
VALUES ('Bind Savers', 'Used book wholsaler, stock includes international titles, 402-555-2323');
INSERT INTO suppliers
VALUES ('Book Recyclers', 'Used book chain, located in Canada, large volume of sales, 888.555.5204');
INSERT INTO suppliers
VALUES ('Page Shock', 'Book wholsaler for specialty books and graphic novels, help@pageshock.com');
INSERT INTO suppliers
VALUES ('RePage', 'Used book vendor, only wholesales, Wash D.C., 555-0122');
COMMIT;
预期的产出是
Supplier emails
------------------------------------------------------------------
No email provided
--------------------
sales@leftovers.com
--------------------
No email provided
--------------------
No email provided
--------------------
No email provided
--------------------
help@pageshock.com
--------------------
No email provided
但是输出要么是错误,要么是我预期的不起作用
Supplier emails
------------------------------------------------------------------
No email provided
-------------------------------------
sales@leftovers.comNo email provided
-------------------------------------
No email provided
-------------------------------------
No email provided
-------------------------------------
No email provided
-------------------------------------
help@pageshock.comNo email provided
-------------------------------------
No email provided
你需要使用NVL
或COALESCE
函数:
SELECT STORE_NAME,
DESCRIPTION,
NVL(REGEXP_SUBSTR(description, '[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}'),
'No email provided') AS EMAIL
FROM SUPPLIERS
NVL
接受两个论点。如果第一个参数不是NULL,则返回它;否则它返回第二个参数。
COALESCE
类似于NVL
,但它接受尽可能多的参数,因为你需要提供并返回第一个非NULL的参数。如果所有参数都为NULL,则COALESCE
将返回NULL。
祝你好运。
以上是关于如何使用Oracle中的SQL中的REGEXP_SUBSTR将自定义消息替换为空插槽的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQL 或 PLSQL 将多行数据插入 Oracle 中的表中?
如何使用 Oracle SQL 验证 txt 文件中的日期?
如何在oracle sql中的where条件中使用case语句?
如何使用 java.sql 包中的 rs.getSQLXML() 函数从 Oracle 数据库中获取 XMLType 列?