SQL更新字段拼接字符串返回0问题求助:生成指定格式邮箱
修复UPDATE拼接字符串后字段全为0的问题
问题场景
需要更新sector表的email_empresa字段,生成规则为:nombre_jefe的首字母 + apellido_jefe完整值 + 后缀@simuladores.com.ar,但执行原语句后所有行的email_empresa都变成了0。
原错误语句
UPDATE sector SET email_empresa = (SUBSTR(nombre_jefe, 1, 1) || apellido_jefe || "@simuladores.com.ar");
问题原因
在MySQL中,||是逻辑或运算符,而非字符串拼接符。当你用||连接字符串时,MySQL会尝试将每个字符串转换为数字类型,转换失败则返回0,最终多个0进行逻辑或运算的结果还是0,因此字段被更新为0。
解决方案
方案1:使用MySQL官方推荐的CONCAT()函数(兼容所有版本)
CONCAT()函数专门用于字符串拼接,支持多个参数:
UPDATE sector SET email_empresa = CONCAT(SUBSTR(nombre_jefe, 1, 1), apellido_jefe, '@simuladores.com.ar');
方案2:修改SQL模式,让||作为拼接符(仅适合特定场景)
临时开启PIPES_AS_CONCAT模式(重启MySQL后失效):
SET sql_mode = 'PIPES_AS_CONCAT';
之后即可使用原语句的拼接写法执行更新:
UPDATE sector SET email_empresa = SUBSTR(nombre_jefe, 1, 1) || apellido_jefe || '@simuladores.com.ar';
若需永久生效,需修改MySQL配置文件(my.cnf或my.ini),在sql_mode中添加PIPES_AS_CONCAT,保存后重启MySQL服务。
验证结果
执行以下语句检查更新效果:
SELECT nombre_jefe, apellido_jefe, email_empresa FROM sector;
应得到如jgomez@simuladores.com.ar的预期格式。
内容的提问来源于stack exchange,提问作者Ariel Cholakian Saz
相关产品推荐
相关产品推荐

