• MySQL:去除 字符串


    记录一下今天在工作时候遇到的一个问题,在前台录入数据的时候,可能会将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', '工程地质勘查报告
    
    ', 'PROTYPE202011301357520003', 'MTYPE202101231039480013', 'YH202103161026260030', '临时测试', '2021-05-07 08:32:11', 'MTYPE202101230931080002', '文字(张)');
    INSERT INTO `ucas_test` VALUES ('MATERIAL202101231523550095', 'B-1-07-02', '水文地质勘查报告
    ', 'PROTYPE202011301357520003', 'MTYPE202101231039480013', 'YH202103161026260030', '临时测试', '2021-05-07 08:32:22', 'MTYPE202101230931080002', '文字(张)');
    INSERT INTO `ucas_test` VALUES ('MATERIAL202101231524220096', 'B-1-08-01', '勘察承包合同
    
    ', 'PROTYPE202011301357520003', 'MTYPE202101231040280014', 'YH202103161026260030', '临时测试', '2021-05-07 08:32:34', 'MTYPE202101230931080002', '文字(张)');
    INSERT INTO `ucas_test` VALUES ('MATERIAL202101231524530097', 'B-1-08-02', '设计承包合同
    ', 'PROTYPE202011301357520003', 'MTYPE202101231040280014', 'YH202103161026260030', '临时测试', '2021-05-07 08:32:45', 'MTYPE202101230931080002', '文字(张)');

    我们使用Notepad2软件打开SQL表格,就可以看到 换行符了、

    解决办法:

    说明:mysql中

    char(9), char(10), char(13)分别是:
    char(9) 表示水平制表符 (tab键 	)
    char(10) 表示换行键 (
    )
    char(13) 表示回车键 (
    )

    第一步:必要:先来学习一下两个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 '%\
    %';

    2、更新数据

    -- 更新换行符为空串第一种方式
    UPDATE 
        ucas_test 
    SET 
        ucas_test.material_maname = REPLACE ( ucas_test.material_maname, CHAR ( 10 ), '' ) 
    WHERE
        ucas_test.material_maname 
    LIKE 
        '%\
    %';
    
    -- 更新换行符为空串第二种方式
    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数据看一下是否更新成功:

  • 相关阅读:
    BZOJ2095 [Poi2010]Bridges
    BZOJ3307 雨天的尾巴
    【CSP2020】 T3 动物园
    【CSP2020】 T1儒略日
    洛谷P3455 [POI2007]ZAP-Queries
    【黑科技学习】光速幂
    XJTUOJ #1023 JM的祖传零钱箱
    XJTUOJ #1168 zxh的后宫管理系统
    XJYUOJ #1053 nocriz与队列计算机
    XJTUOJ #1017 JM的完美集合
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/14785823.html
Copyright © 2020-2023  润新知