sql - 在 postgresql 中运行更新查询时出错
问题描述
我是 PostgreSQL 新手。在更新查询下方运行时,我遇到了错误。
update useremails ue
SET ue.useinstitutionid=id.InstitutionID from instdomains id
where ue.email REGEXP CONCAT('^.*[.@]',id.DomainMask,'$');
错误:“REGEXP”处或附近的语法错误
mysql查询
UPDATE useremails
JOIN instdomains ON useremails.email
REGEXP CONCAT('^.*[.@]',instdomains.DomainMask,'$')
SET useremails.useinstitutionid=instdomains.InstitutionID;
我将此查询从 mysql 转换为 Postgresql。如何在 postgresql 中重写此查询?
解决方案
Postgres 中的正则表达式运算符是~
, not REGEXP
(由 MySQL 和 SQLite 使用)。试试这个版本:
UPDATE useremails ue
SET useinstitutionid = id.InstitutionID
FROM instdomains id
WHERE ue.email ~* ('^.*[.@]' || id.DomainMask); -- case insensitive, for a case
-- sensitive match just use ~
请注意,您几乎可以使用常规LIKE
运算符轻松表达上述更新:
UPDATE useremails ue
SET useinstitutionid = id.InstitutionID
FROM instdomains id
WHERE ue.email LIKE '%.' || id.DomainMask || '%' OR
ue.email LIKE '%@' || id.DomainMask || '%';
推荐阅读
- python - 在 Python 中合并图像
- reactjs - 媒体查询在检查员中有效,但在手机上无效
- tensorflow - 具有多个隐藏层的 TensorFlow 2 GRU 层
- reactjs - React-Select isMulti 检索选择的选项
- ios - UITableView 单元格中的旋转动画不起作用
- mysql - 无法连接到在 kubernetes 部署中运行的 mysql 服务器暴露为负载均衡器
- docker - Docker 服务未在已发布的端口上侦听
- compiler-errors - SML 产生编译器错误
- c++ - Vulkan 将视口结果翻转为黑屏
- node.js - 共享主机的 Node / Express 挑战