首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数POSTGRESQL中的CASE-WHEN

函数POSTGRESQL中的CASE-WHEN
EN

Stack Overflow用户
提问于 2016-05-24 02:01:19
回答 2查看 70关注 0票数 0

我有一个函数可以将一些值插入到表中,但是在插入之前,我想检查一下电子邮件地址是否正确。如果没有,则中断函数并返回一个错误。是真的,继续。

代码语言:javascript
复制
case when _email ~ '^[^@\s]+@[^@\s]+(\.[^@\s]+)+$' = true 
then raise exception 'Incorrect email'

_email是函数的参数。但这不管用。我应该使用"IF“还是其他条件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-24 05:12:46

CASE可以工作,但IF似乎更合适。

在表达式中有一些毫无意义的噪音,我认为逻辑向后:如果_email与模式不匹配,应该触发“不正确的电子邮件”:

代码语言:javascript
复制
IF _email ~ '^[^@\s]+@[^@\s]+(\.[^@\s]+)+$'  -- drop the pointless "= true"
THEN  -- do nothing - I inverted the logic
ELSE RAISE EXCEPTION 'Incorrect email';
END IF;

新的ASSERT (Postgres 9.5+)也可以工作,但这实际上是用于调试的:

代码语言:javascript
复制
ASSERT _email ~ '^[^@\s]+@[^@\s]+(\.[^@\s]+)+$', 'Incorrect email';
票数 2
EN

Stack Overflow用户

发布于 2016-05-24 02:12:36

您应该能够在plpgsql中使用这个案例。很明显,你想做的事情也可以通过if声明来完成.

代码语言:javascript
复制
 case when _email ~ '^[^@\s]+@[^@\s]+(\.[^@\s]+)+$' = true then
           raise exception 'Incorrect email';
      else
           --proceed with insert
  end case;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37403229

复制
相关文章

相似问题

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