美文网首页
MYSQL的instr()和trim()函数

MYSQL的instr()和trim()函数

作者: 帮我的鸵鸟盖个章 | 来源:发表于2018-12-24 11:41 被阅读0次

    trim()

    trim()函数用来过滤指定的字符串。

    完整格式:TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)

    删除指定情况下str中的remstr。若没有指定情况,默认删除str前后空格

    经测试发现,trim()函数只能用来删除前后数据。

    BOTH 删除指定的首尾字符
    SELECT TRIM(BOTH 'a' FROM 'aaababccaa');
    # 输出:'babcc'
    
    LEADING 删除指定的首字符
    SELECT TRIM(LEADING 'a' FROM 'aaababccaa');
    # 输出:'babccaa'
    
    TRAILING删除指定的尾字符
    SELECT TRIM(TRAILING 'a' FROM 'aaababccaa');
    # 输出:'aaababcc'
    
    无条件,删除前后空格
    SELECT TRIM('  aaababccaa  ');
    # 输出:'aaababcc'
    

    MySQL中也可以使用LTRIM,RTRIM函数删除左或右空格

    LTRIM函数去除左空格
    SELECT LTRIM('  aaababccaa');
    # 输出:'aaababccaa'
    
    RTRIM函数去除右空格
    SELECT RTRIM('aaababccaa  ');
    # 输出:'aaababccaa'
    

    instr()

    格式一:instr( string1, string2 ) / instr(源字符串, 目标字符串)

    格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] ) / instr(源字符串, 目标字符串, 起始位置, 匹配序号)

    解析:

    格式一:在string1中查找string2,返回string2出现的第一个位置(index)。index是从1开始计算,如果没有找到就直接返回0,没有返回负数的情况。

    格式二:在string1中查找string2,是从start_position给出的数值(即:位置)开始在string1检索,检索第nth_appearance(几)次出现string2。从1开始计算,如果没有找到就直接返回0,没有返回负数的情况。

    eg:

    格式一

    select instr('helloworld','l') from dual; --返回结果:3    默认第一次出现“l”的位置
    select instr('helloworld','lo') from dual; --返回结果:4    即:在“lo”中,“l”开始出现的位置
    select instr('helloworld','wo') from dual; --返回结果:6    即“w”开始出现的位置
    

    格式二

    select instr('helloworld','l',2,2) from dual;  --返回结果:4    也就是说:在"helloworld"的第2(e)号位置开始,查找第二次出现的“l”的位置
    select instr('helloworld','l',3,2) from dual;  --返回结果:4    也就是说:在"helloworld"的第3(l)号位置开始,查找第二次出现的“l”的位置
    select instr('helloworld','l',4,2) from dual;  --返回结果:9    也就是说:在"helloworld"的第4(l)号位置开始,查找第二次出现的“l”的位置
    select instr('helloworld','l',-1,1) from dual;  --返回结果:9    也就是说:在"helloworld"的倒数第1(d)号位置开始,往回查找第一次出现的“l”的位置
    select instr('helloworld','l',-2,2) from dual;  --返回结果:4    也就是说:在"helloworld"的倒数第1(d)号位置开始,往回查找第二次出现的“l”的位置
    select instr('helloworld','l',2,3) from dual;  --返回结果:9    也就是说:在"helloworld"的第2(e)号位置开始,查找第三次出现的“l”的位置
    select instr('helloworld','l',-2,3) from dual; --返回结果:3    也就是说:在"helloworld"的倒数第2(l)号位置开始,往回查找第三次出现的“l”的位置
    

    trim()和instr()函数结合使用

    在实际场景中,根据用户输入的数据进行条件查询。例如,根据姓名模糊查询,用户在搜索框中输入的时候前后可能会带上空格,这个时候我们就可以使用trim()函数去除用户输入数据的前后空格,然后使instr()函数检索该输入数据在数据库中对应字段是否存在。

    select * from user where instr(user_name,trim(#{userName})) > 0
    
    使用trim()更新数据库

    有一次我们发现,用户在通过Excel向系统中导入数据的时候,某些字段后面带上了空格,而数据已经导入数据库,可以使用trim()更新数据库对应字段

    UPDATE epc_carseries_configuration
    SET car_year=trim(car_year),
      displacement=trim(displacement),
      transmission=trim(transmission),
      drive_model=trim(drive_model),
      interior_color=trim(interior_color),
      country_area=trim(country_area),
      config_name=trim(config_name);
    

    相关文章

      网友评论

          本文标题:MYSQL的instr()和trim()函数

          本文链接:https://www.haomeiwen.com/subject/nxgakqtx.html