SQL Server计算列返回换行符:如何去除该多余换行?
解决计算列full_name出现换行符的问题
问题根源
你的first_name或last_name字段中存在隐藏的回车(CHAR(13))或换行(CHAR(10))字符,直接拼接时这些字符会被保留到full_name的结果里,导致出现换行。
针对不同数据库的解决方案
SQL Server
先删除原有计算列,再重新创建带清除换行/回车逻辑的计算列:
ALTER TABLE 你的表名 DROP COLUMN full_name; ALTER TABLE 你的表名 ADD full_name AS ( REPLACE(REPLACE(first_name, CHAR(13), ''), CHAR(10), '') + ' ' + REPLACE(REPLACE(last_name, CHAR(13), ''), CHAR(10), '') );
MySQL
同样先删除旧列,再创建带清除逻辑的计算列:
ALTER TABLE 你的表名 DROP COLUMN full_name; ALTER TABLE 你的表名 ADD full_name VARCHAR(255) AS ( CONCAT( REPLACE(REPLACE(first_name, CHAR(13), ''), CHAR(10), ''), ' ', REPLACE(REPLACE(last_name, CHAR(13), ''), CHAR(10), '') ) );
PostgreSQL
使用正则替换一次性清除所有换行相关字符:
ALTER TABLE 你的表名 DROP COLUMN full_name; ALTER TABLE 你的表名 ADD COLUMN full_name TEXT GENERATED ALWAYS AS ( REGEXP_REPLACE(first_name, '[\r\n]', '', 'g') || ' ' || REGEXP_REPLACE(last_name, '[\r\n]', '', 'g') ) STORED;
也可以用嵌套REPLACE逐个清除:
ALTER TABLE 你的表名 ADD COLUMN full_name TEXT GENERATED ALWAYS AS ( REPLACE(REPLACE(first_name, E'\r', ''), E'\n', '') || ' ' || REPLACE(REPLACE(last_name, E'\r', ''), E'\n', '') ) STORED;
验证字段中的换行符
如果想确认是哪个字段带了换行符,可以执行以下查询:
-- SQL Server SELECT first_name, last_name FROM 你的表名 WHERE first_name LIKE '%' + CHAR(10) + '%' OR first_name LIKE '%' + CHAR(13) + '%' OR last_name LIKE '%' + CHAR(10) + '%' OR last_name LIKE '%' + CHAR(13) + '%'; -- MySQL SELECT first_name, last_name FROM 你的表名 WHERE first_name LIKE CONCAT('%', CHAR(10), '%') OR first_name LIKE CONCAT('%', CHAR(13), '%') OR last_name LIKE CONCAT('%', CHAR(10), '%') OR last_name LIKE CONCAT('%', CHAR(13), '%'); -- PostgreSQL SELECT first_name, last_name FROM 你的表名 WHERE first_name ~ '[\r\n]' OR last_name ~ '[\r\n]';
内容的提问来源于stack exchange,提问作者enzopezzoni
相关产品推荐
相关产品推荐

