更新时间:2022-02-22 GMT+08:00

字符串函数

DLI常用字符串函数如下所示:

表1 字符串运算符

运算符

返回类型

描述

||

VARCHAR

两个字符串的拼接。

CHAR_LENGTH

INT

返回字符串中的字符数量。

CHARACTER_LENGTH

INT

返回字符串中的字符数量。

CONCAT

VARCHAR

拼接两个或多个字符串值从而组成一个新的字符串。如果任一参数为NULL时,则跳过该参数。

CONCAT_WS

VARCHAR

将每个参数值和第一个参数separator指定的分隔符依次连接到一起组成新的字符串,长度和类型取决于输入值。

HASH_CODE

INT

返回字符串的HASH_CODE()的绝对值。参数除string外,也支持int/bigint/float/double。

INITCAP

VARCHAR

返回字符串,将单词首字母转换为大写,其余为小写。 单词是由非字母、数字、字符分隔的字母、数字、字符序列。

IS_ALPHA

BOOLEAN

判断字符串是否只包含字母。

IS_DIGITS

BOOLEAN

判断字符串是否只包含数字。

IS_NUMBER

BOOLEAN

判断字符串是否是数值。

IS_URL

BOOLEAN

判断字符串是否是合法的URL地址。

JSON_VALUE

VARCHAR

获取json字符串中指定path的值。

KEY_VALUE

VARCHAR

获取键值对字符串中某一个key对应的值。

LOWER

VARCHAR

返回小写字符的字符串。

LPAD

VARCHAR

将pad字符串拼接到str字符串的的左端,直到新的字符串达到指定长度len为止。

MD5

VARCHAR

返回字符串的MD5值。如果参数为空串(即参数为")时,则返回空串。

OVERLAY

VARCHAR

用y替换x的子串。从start_position开始,替换length+1个字符。

POSITION

INT

返回目标字符串x在被查询字符串y里第一次出现的位置。如果目标字符串x在被查询字符串y中不存在,返回值为0。

REPLACE

VARCHAR

字符串替换函数,将字符串str1中的所有str2替换成str3。

  • str1:原字符。
  • str2:目标字符。
  • str3:替换字符。

RPAD

VARCHAR

将pad字符串拼接到str字符串的的右端,直到新的字符串达到指定长度len为止。

SHA1

STRING

返回字符串expr的SHA1值。

SHA256

STRING

返回字符串expr的SHA256值。

STRING_TO_ARRAY

ARRAY[STRING]

将字符串value按delimiter分隔为字符串数组。

SUBSTRING

VARCHAR

返回从给定位置开始的A的子字符串。起始位置从1开始。

TRIM

STRING

从B中除去字符串首尾/首位/末尾的A。默认情况下,首尾的A都被删除。

UPPER

VARCHAR

返回转换为大写字符的字符串。

||

  • 功能描述

    两个字符串的拼接。

  • 语法
    VARCHAR VARCHAR a || VARCHAR b
  • 参数说明
    • a:字符串。
    • b:字符串。
  • 示例
    • 测试语句
      SELECT "hello" || "world";
    • 测试结果
      "helloworld"

CHAR_LENGTH

  • 功能描述

    返回字符串中的字符数量。

  • 语法
    INT CHAR_LENGTH(a)
  • 参数说明
    • a:字符串。
  • 示例
    • 测试语句
      SELECT  CHAR_LENGTH(var1) as aa FROM T1;
    • 测试数据和结果
      表2 测试数据和结果

      测试数据(var1)

      测试结果(aa)

      abcde123

      8

CHARACTER_LENGTH

  • 功能描述

    返回字符串中的字符数量。

  • 语法
    INT CHARACTER_LENGTH(a)
  • 参数说明
    • a:字符串。
  • 示例
    • 测试语句
      SELECT  CHARACTER_LENGTH(var1) as aa FROM T1;
    • 测试数据和结果
      表3 测试数据和结果

      测试数据(var1)

      测试结果(aa)

      abcde123

      8

CONCAT

  • 功能描述

    拼接两个或多个字符串值从而组成一个新的字符串。如果任一参数为NULL时,则跳过该参数。

  • 语法
    VARCHAR CONCAT(VARCHAR var1, VARCHAR var2, ...)  
  • 参数说明
    • var1:字符串
    • var2:字符串
  • 示例
    • 测试语句
      SELECT CONCAT("abc", "def", "ghi", "jkl");
    • 测试结果
      "abcdefghijkl"

CONCAT_WS

  • 功能描述

    将每个参数值和第一个参数separator指定的分隔符依次连接到一起组成新的字符串,长度和类型取决于输入值。

    如果separator取值为null,则将separator视作与空串进行拼接。如果其它参数为null,在执行拼接过程中跳过取值为null的参数。

  • 语法
    VARCHAR CONCAT_WS(VARCHAR separator, VARCHAR var1, VARCHAR var2, ...)
  • 参数说明
    • separator:分隔符。
    • var1:字符串。
    • var2:字符串。
  • 示例
    • 测试语句
      SELECT CONCAT_WS("-", "abc", "def", "ghi", "jkl");
    • 测试结果
      "abc-def-ghi-jkl"

HASH_CODE

  • 功能描述

    返回字符串的HASH_CODE()的绝对值。参数除string外,也支持int/bigint/float/double。

  • 语法
    INT HASH_CODE(VARCHAR str)
  • 参数说明
    • str:字符串。
  • 示例
    • 测试语句
      SELECT HASH_CODE("abc");
    • 测试结果
      96354

INITCAP

  • 功能描述

    返回字符串,将字符串首字母转换为大写,其余为小写。字符串是由非字母、数字、字符分隔的字母、数字、字符序列。

  • 语法
    VARCHAR INITCAP(a)
  • 参数说明
    • a:字符串。
  • 示例
    • 测试语句
      SELECT INITCAP(var1)as aa FROM T1;
    • 测试数据和结果
      表4 测试数据和结果

      测试数据(var1)

      测试结果(aa)

      aBCde

      Abcde

IS_ALPHA

  • 功能描述

    判断字符串是否只包含字母。

  • 语法
    BOOLEAN IS_ALPHA(VARCHAR content)
  • 参数说明
    • content:输入字符串。
  • 示例
    • 测试语句
      SELECT IS_ALPHA(content)  AS case_result FROM T1;
    • 测试数据和结果
      表5 测试数据和结果

      测试数据(content)

      测试结果(case_result)

      Abc

      true

      abc1#$

      false

      null

      false

      ""(空字符串)

      false

IS_DIGITS

  • 功能描述

    判断字符串是否只包含数字。

  • 语法
    BOOLEAN IS_DIGITS(VARCHAR content)
  • 参数说明
    • content:输入字符串。
  • 示例
    • 测试语句
      SELECT IS_DIGITS(content) AS case_result FROM T1;
    • 测试数据和结果
      表6 测试数据和结果

      测试数据(content)

      测试结果(case_result)

      78

      true

      78.0

      false

      78a

      false

      null

      false

      "" (空字符串)

      false

IS_NUMBER

  • 功能描述

    判断字符串是否是数值。

  • 语法
    BOOLEAN IS_NUMBER(VARCHAR content)
  • 参数说明
    • content:输入字符串。
  • 示例
    • 测试语句
      SELECT IS_NUMBER(content) AS case_result FROM T1;
    • 测试数据和结果
      表7 测试数据和结果

      测试数据(content)

      测试结果(case_result)

      78

      true

      78.0

      true

      78a

      false

      null

      false

      "" (空字符串)

      false

IS_URL

  • 功能描述

    判断字符串是否是合法的URL地址。

  • 语法
    BOOLEAN IS_URL(VARCHAR content)
  • 参数说明
    • content:输入字符串。
  • 示例
    • 测试语句
      SELECT IS_URL(content) AS case_result FROM T1;
    • 测试数据和结果
      表8 测试数据和结果

      测试数据(content)

      测试结果(case_result)

      https://www.testweb.com

      true

      https://www.testweb.com:443

      true

      www.testweb.com:443

      false

      null

      false

      "" (空字符串)

      false

JSON_VALUE

  • 功能描述

    获取json字符串中指定path的值。

  • 语法
    VARCHAR JSON_VALUE(VARCHAR content, VARCHAR path)
  • 参数说明
    • content:输入字符串。
    • path:要获取的path路径。
  • 示例
    • 测试语句
      SELECT JSON_VALUE(content, path) AS case_result FROM T1;
    • 测试数据和结果
      表9 测试数据和结果

      测试数据(content,path)

      测试结果(case_result)

      { "a1":"v1","a2":7,"a3":8.0,"a4": {"a41":"v41","a42": ["v1","v2"]}}

      $

      { "a1":"v1","a2":7,"a3":8.0,"a4": {"a41":"v41","a42": ["v1","v2"]}}

      { "a1":"v1","a2":7,"a3":8.0,"a4": {"a41":"v41","a42": ["v1","v2"]}}

      $.a1

      v1

      { "a1":"v1","a2":7,"a3":8.0,"a4": {"a41":"v41","a42": ["v1","v2"]}}

      $.a4

      {"a41":"v41","a42": ["v1","v2"]}

      { "a1":"v1","a2":7,"a3":8.0,"a4": {"a41":"v41","a42": ["v1","v2"]}}

      $.a4.a42

      ["v1","v2"]

      { "a1":"v1","a2":7,"a3":8.0,"a4": {"a41":"v41","a42": ["v1","v2"]}}

      $.a4.a42[0]

      v1

KEY_VALUE

  • 功能描述

    获取键值对字符串中某一个key对应的值。

  • 语法
    VARCHAR KEY_VALUE(VARCHAR content, VARCHAR split1, VARCHAR split2, VARCHAR key_name)
  • 参数说明
    • content:输入字符串。
    • split1:多个键值对分隔符。
    • split2:key/value分隔符。
    • key_name:要获取的键名称。
  • 示例
    • 测试语句
      SELECT KEY_VALUE(content, split1, split2, key_name)  AS case_result FROM T1;
    • 测试数据和结果
      表10 测试数据和结果

      测试数据(content, split1, split2, key_name)

      测试结果(case_result)

      k1=v1;k2=v2

      ;

      =

      k1

      v1

      null

      ;

      =

      k1

      null

      k1=v1;k2=v2

      null

      =

      k1

      null

LOWER

  • 功能描述

    返回小写字符的字符串。

  • 语法
    VARCHAR LOWER(A)
  • 参数说明
    • A:字符串。
  • 示例
    • 测试语句
      SELECT LOWER(var1) AS aa FROM T1;
    • 测试数据和结果
      表11 测试数据和结果

      测试数据(var1)

      测试结果(aa)

      ABc

      abc

LPAD

  • 功能描述

    将pad字符串拼接到str字符串的的左端,直到新的字符串达到指定长度len为止。

  • 语法
    VARCHAR LPAD(VARCHAR str, INT len, VARCHAR pad)
  • 参数说明
    • str:拼接前的字符串。
    • len:拼接后的字符串的长度。
    • pad:被拼接的字符串。
    • 任意参数为null时返回null。
    • len为负数时返回为null。
    • len不大于str长度,返回str裁剪为len长度的字符串。如果len大于str长度时,则返回null。
  • 示例
    • 测试语句
      SELECT
        LPAD("adc", 2, "hello"),
        LPAD("adc", -1, "hello"),
        LPAD("adc", 10, "hello");
    • 测试结果
      "ad",,"helloheadc"

MD5

  • 功能描述

    返回字符串的MD5值。如果参数为空串(即参数为")时,则返回空串。

  • 语法
    VARCHAR MD5(VARCHAR str)
  • 参数说明
    • str:字符串
  • 示例
    • 测试语句
      SELECT MD5("abc");
    • 测试结果
      "900150983cd24fb0d6963f7d28e17f72"

OVERLAY

  • 功能描述

    用y替换x的子串。从start_position开始,替换length+1个字符。

  • 语法
    VARCHAR OVERLAY ( (VARCHAR x PLACING VARCHAR y FROM INT start_position [ FOR INT length ]) )
  • 参数说明
    • x:字符串。
    • y:字符串。
    • start_position:起始位置。
    • length(可选):字符长度。
  • 示例
    • 测试语句:
      OVERLAY('abcdefg' PLACING 'xyz' FROM 2 FOR 2) AS result FROM T1;
    • 测试结果:
      表12 测试结果

      result

      axyzdefg

POSITION

  • 功能描述

    返回目标字符串x在被查询字符串y里第一次出现的位置。如果目标字符串x在被查询字符串y中不存在,返回值为0。

  • 语法
    INTEGER POSITION(x IN y)
  • 参数说明
    • x:字符串。
    • y:字符串。
  • 示例
    • 测试语句:
      POSITION('in' IN 'chin') AS result FROM T1;
    • 测试结果
      表13 测试结果

      result

      3

REPLACE

  • 功能描述

    字符串替换函数,将字符串str1中的所有str2替换成str3。

  • 语法
    VARCHAR REPLACE(VARCHAR str1, VARCHAR str2, VARCHAR str3)
  • 参数说明
    • str1:原字符。
    • str2:目标字符。
    • str3:替换字符。
  • 示例
    • 测试语句:
      SELECT
        replace(
          "hello world hello world hello world",
          "world",
          "hello"
        );
    • 测试结果
      "hello hello hello hello hello hello"

RPAD

  • 功能描述

    将pad字符串拼接到str字符串的的右端,直到新的字符串达到指定长度len为止。

    • 如果任意参数为null时,则返回null。
    • len为负数时,返回为null。
    • pad为空串,如果len小于str长度,返回str裁剪为len长度的字符串。
    • 如果len大于str长度,则返回null。
  • 语法
    VARCHAR RPAD(VARCHAR str, INT len, VARCHAR pad)
  • 参数说明
    • str:启始的字符串。
    • len:新的字符串的长度。
    • pad:需要重复补充的字符串。
  • 示例
    • 测试语句
      SELECT
        RPAD("adc", 2, "hello"),
        RPAD("adc", -1, "hello"),
        RPAD("adc", 10, "hello");
    • 测试结果
      "ad",,"adchellohe"

SHA1

  • 功能描述

    返回字符串expr的SHA1值。

  • 语法
    STRING SHA1(STRING expr)
  • 参数说明
    • expr:字符串。
  • 示例
    • 测试语句
      SELECT SHA1("abc");
    • 测试结果
      "a9993e364706816aba3e25717850c26c9cd0d89d"

SHA256

  • 功能描述

    返回字符串expr的SHA256值。

  • 语法
    STRING SHA256(STRING expr)
  • 参数说明
    • expr:字符串。
  • 示例
    • 测试语句
      SELECT SHA256("abc");
    • 测试结果
      "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"

STRING_TO_ARRAY

  • 功能描述

    将字符串value按delimiter分隔为字符串数组。

    delimiter使用的是java的正则表达式,若使用特殊字符则需要转义。

  • 语法
    ARRAY[String] STRING_TO_ARRAY(STRING value, VARCHAR delimiter)
  • 参数说明
    • value:字符串。
    • delimiter:分隔符。
  • 示例
    • 测试语句
      SELECT
        string_to_array("127.0.0.1", "\\."),
        string_to_array("red-black-white-blue", "-");
    • 测试结果
      [127,0,0,1],[red,black,white,blue]

SUBSTRING

  • 功能描述

    返回从指定位置开始的A的子字符串。起始位置从1开始。

    • 如果未指定len,则截取从位置start开始,到字符串结尾的子字符串。
    • 如果指定len,则截取从位置start开始,长度为len的子字符串。

    start从1开始,start为0时当1看待,为负数时表示从字符串末尾倒序计算位置。

  • 语法
    VARCHAR SUBSTRING(STRING A FROM INT start) 

    VARCHAR SUBSTRING(STRING A FROM INT start FOR INT len)
  • 参数说明
    • A:指定的字符串。
    • start:在字符串A中开始截取的位置。
    • len:截取的长度。
  • 示例
    • 测试语句1
      SELECT SUBSTRING("123456" FROM 2);
    • 测试结果1
      "23456"
    • 测试语句2
      SELECT SUBSTRING("123456" FROM 2 FOR 4);
    • 测试结果2
      "2345"

TRIM

  • 功能描述

    从B中除去字符串首尾/首位/末尾的A。默认情况下,首尾的A都被删除。

  • 语法
    STRING TRIM( { BOTH | LEADING | TRAILING } STRING a FROM STRING b)
  • 参数说明
    • a:字符串。
    • b:字符串。
  • 示例
    • 测试语句
      SELECT TRIM(BOTH " " FROM "  hello world  ");
    • 测试结果
      "hello world"

UPPER

  • 功能描述

    返回转换为大写字符的字符串。

  • 语法
    VARCHAR UPPER(A)
  • 参数说明
    • A:字符串。
  • 示例
    • 测试语句
      SELECT UPPER("hello world");
    • 测试结果
      "HELLO WORLD"