MySQL:去除\n字符串


記錄一下今天在工作時候遇到的一個問題,在前台錄入數據的時候,可能會將Excel中換行符復制到了前台頁面中,然后保存到了數據庫中。

我這里貼上一點sql文件,僅供測試使用:

DROP TABLE IF EXISTS `ucas_test`;
CREATE TABLE `ucas_test`  (
  `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `material_macode` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '材料序號',
  `material_maname` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '材料名稱',
  `protype_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '工程類型id',
  `mtype_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '材料類型id',
  `whrid` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '維護人id',
  `whr` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '維護人',
  `whsj` datetime(0) NULL DEFAULT NULL COMMENT '維護時間',
  `mtype_fid` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '材料類別fid',
  `material_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '材料類型',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8;

INSERT INTO `ucas_test` VALUES ('MATERIAL202101231522200094', 'B-1-07-01', '工程地質勘查報告\n\n', 'PROTYPE202011301357520003', 'MTYPE202101231039480013', 'YH202103161026260030', '臨時測試', '2021-05-07 08:32:11', 'MTYPE202101230931080002', '文字(張)');
INSERT INTO `ucas_test` VALUES ('MATERIAL202101231523550095', 'B-1-07-02', '水文地質勘查報告\n', 'PROTYPE202011301357520003', 'MTYPE202101231039480013', 'YH202103161026260030', '臨時測試', '2021-05-07 08:32:22', 'MTYPE202101230931080002', '文字(張)');
INSERT INTO `ucas_test` VALUES ('MATERIAL202101231524220096', 'B-1-08-01', '勘察承包合同\n\n', 'PROTYPE202011301357520003', 'MTYPE202101231040280014', 'YH202103161026260030', '臨時測試', '2021-05-07 08:32:34', 'MTYPE202101230931080002', '文字(張)');
INSERT INTO `ucas_test` VALUES ('MATERIAL202101231524530097', 'B-1-08-02', '設計承包合同\n', 'PROTYPE202011301357520003', 'MTYPE202101231040280014', 'YH202103161026260030', '臨時測試', '2021-05-07 08:32:45', 'MTYPE202101230931080002', '文字(張)');

我們使用Notepad2軟件打開SQL表格,就可以看到\n換行符了、

解決辦法:

說明:mysql中

char(9), char(10), char(13)分別是:
char(9) 表示水平制表符 (tab鍵 \t)
char(10) 表示換行鍵 (\n)
char(13) 表示回車鍵 (\r)

第一步:必要:先來學習一下兩個MySQL中函數

concat(str1,str2,…) 

使用方法:
concat(str1,str2,…)  

返回結果為連接參數產生的字符串。如有任何一個參數為NULL ,則返回值為 NULL。

select concat('z','zx');

replace(object,search,replace) 

object:要進行替換的列
search:要替換的數據
replace:替換成什么數據
意思:把object中出現search的全部替換為replace

第二步、進行更新數據

1.先查到要更改的數據

-- 第一種方式
SELECT
 * 
FROM
 ucas_test 
WHERE
 ucas_test.material_maname LIKE CONCAT( '%', CHAR ( 10 ), '%' );
 
-- 第二種方式
SELECT
 * 
FROM
 ucas_test 
WHERE
 ucas_test.material_maname LIKE '%\\\n%';

2、更新數據

-- 更新換行符為空串第一種方式
UPDATE 
    ucas_test 
SET 
    ucas_test.material_maname = REPLACE ( ucas_test.material_maname, CHAR ( 10 ), '' ) 
WHERE
    ucas_test.material_maname 
LIKE 
    '%\\\n%';

-- 更新換行符為空串第二種方式
UPDATE 
    ucas_test 
SET 
    ucas_test.material_maname
    = 
    REPLACE ( REPLACE ( ucas_material.material_maname, CHAR ( 10 ), '' ), CHAR ( 13 ), '' ) 
WHERE
    ucas_test.material_maname 
LIKE 
    concat( '%', CHAR ( 10 ), '%' );

更新成功:

 再導出SQL數據看一下是否更新成功:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM