字符串函数

参考


长度相关

  • char_length(string str)character_length(string str)length(string A)

    • 返回字符串长度,支持 UTF-8

    • select character_length('abc'), char_length('测试'), length('正式');
      
  • octet_length(string str)

    • 返回以 UTF-8 编码方式存储该字符串所需的 8 位字节空间

    • select octet_length('English'), octet_length('中文');
      

035


大小写、格式化相关

  • format_number(number x, int d)

    • 将数值格式化(四舍五入)为 ‘#,###,###.##’ 的字符串返回

      • 由 d 指定保留到小数点后第几位,d >= 0
    • select
          -- format_number(3.141592654*100, -2), -- 报错
          format_number(3.141592654, 3),
          format_number(3.141592654, 0);
      
  • lower(string A)lcase(string A)

    • 将字符串全部转为小写

    • select lower('Hello World!'), lcase('Hello Earth!');
      
  • upper(string A)ucase(string A)

    • 将字符串全部转为大写

    • select upper('Hello World!'), ucase('Hello Earth!');
      
  • initcap(string A)

    • 将字符串转为:“每个单词的第一个字母大写,其他字母小写,单词间用空格分隔” 的格式

    • select
          initcap('hello world!'),
          initcap('HELLO EARTH!'),
          initcap('HELLO   JAVA!'),
          initcap('hi_hive!');
      

    038

  • lpad(string str, int len, string pad)

    • 使用 pad 从左边将 str 填充到指定的 len 长度

    • 如果 len 小于 str 原有的长度,则从尾部进行截断

    • select
          lpad('cat', 5, '*'),
          lpad('cat', 3, '*'),
          lpad('cat', 2, '*'),
          lpad('cat', 5, '*_*');
      
  • rpad(string str, int len, string pad)

    • 参考上面 lpad(string str, int len, string pad)

    • select
          rpad('cat', 5, '*'),
          rpad('cat', 3, '*'),
          rpad('cat', 2, '*'),
          rpad('cat', 5, '*_*');
      
  • ltrim(string A)

    • 去掉字符串左侧的空字符
  • rtrim(string A)

    • 去掉字符串右侧的空字符
  • trim(string A)

    • 去掉字符串左右两侧侧的空字符

    • select
          ltrim('  cat  '), length(ltrim('  cat  ')),
          rtrim('  cat  '), length(rtrim('  cat  ')),
          trim('  cat  '), length(trim('  cat  '));
      
  • printf(String format, Obj... args)

    • 类似 JAVA 中的 System.out.printf(String format, Object... args)

    • select printf('%d 只%s %d 张嘴,%d 只%s %d 条%s', 1, '青蛙', 1, 2, '眼睛', 4, '腿');
      

    039


反转及其他

  • levenshtein(string A, string B)

    • 返回两个字符串之间的 Levenshtein 距离(即编辑距离,指由一个字符串转换成另一个所需的最少编辑次数)

    • select levenshtein('kitten', 'sitting');
      
  • reverse(string A)

    • 反转字符串

    • select reverse('kitty'), reverse(NULL);
      
  • repeat(string str, int n)

    • 返回由 n 个 str (重放)构成的字符串

    • select
          repeat('kitty', 3),
          repeat('kitty', 0),
          repeat(NULL, 3);
      
  • space(int n)

    • 返回由 n 个 “空格”(重放)构成的字符串

    • select space(5), length(space(5));
      

    040


字符串连接、拆分以及与集合类型的互转

  • concat(string|binary A, string|binary B...)

    • 将多个字符串拼接为一个

    • || 字符串拼接符一样,参考

    • select
          'Hello'||'World!'||'Hello'||'Earth!',
          concat('Hello', 'World!', 'Hello', 'Earth!');
      
  • concat_ws(string SEP, string A, string B...)

    • 使用指定的 SEP 拼接多个字符串

    • select
          concat_ws('_', 'Hello', 'World!', 'Hello', 'Earth!'),
          concat_ws(' ', 'Hello', 'World!', 'Hello', 'Earth!');
      
  • concat_ws(string SEP, array<string>)

    • 将 “字符串数组” 转为使用指定 SEP 连接的字符串

    • select
          concat_ws(' ', array('Hello', 'World!', 'Hello', 'Earth!')),
          concat_ws(' ', 'Hello', array('World!', 'Hello', 'Earth!'));
      
  • elt(N int,str1 string,str2 string,str3 string,...)

    • 返回第 N 个传入参数

    • 如果 N 小于 1 或 N 大于字符串参数的个数 则返回 NULL

    • select
          elt(1, 'a', 'b', 'c', NULL),
          elt(3, 'a', 'b', 'c', NULL),
          elt(4, 'a', 'b', 'c', NULL),
          elt(0, 'a', 'b', 'c', NULL),
          elt(9, 'a', 'b', 'c', NULL);
      
  • split(string str, string pat)

    • 以 pat 分割,将字符串转换为 array 对象

      • pat 是一个正则表达式
    • select split('cat|dog|parrot|turtle', '\\|');
      
  • str_to_map(text[, delimiter1, delimiter2])

    • 字符串转为 map 对象

      • 使用 delimiter1 分隔 k:v 对,缺省使用 ,
      • 使用 delimiter2 分隔 k 和 v ,缺省使用 :
    • select
          str_to_map('cat:kitty,dog:puppy,parrot:polly'),
          str_to_map('cat.kitty;dog.puppy;parrot.polly', '\\;', '\\.');
      

    041