Skip to content

字符串相关函数

表达式中参数说明:

  • expr :表达式
  • columnName :字段名

ascii

对输入参数 s 求 ASCII 值,参数的值类型必须为 String,传入其他类型将报错,接收 1 个参数,返回 Int64

语法

sql
ascii(s: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果 s 为 NULL,返回 NULL
  • 返回 Int64 类型

示例

sql
> SELECT ascii("A")

┌─ascii("A")────────────────────┐
65
└───────────────────────────────┘

bin

将输入参数 n 转为二进制格式,参数的值类型必须为 Number,传入其他类型将报错,接收 1 个参数,返回 String

语法

sql
bin(n: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果 n 为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT bin(127)

┌─bin(127)────────────────────┐
1111111
└─────────────────────────────┘

concat

将参数 str... 进行连接,可接收多个参数,所有参数的值类型必须为 String,传入其他类型将报错,返回 String

语法

sql
concat(str1: expr | columnName [, str2: expr | columnName...])

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT concat("A", "B")

┌─concat("A", "B")─────────┐
│ AB                       │
└──────────────────────────┘

concat_ws

将参数使用 sep 进行连接,可接收多个参数,所有参数的值类型必须为 String,传入其他类型将报错,返回 String

语法

sql
concat_ws(sep: expr | columnName, str1: expr | columnName [, str2: expr | columnName...])

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT concat_ws(",", "A", "B")

┌─concat_ws(",", "A", "B")───────┐
│ A,B                            │
└────────────────────────────────┘

elt

从第二个参数以后得参数列表中取 nth 个值,可接收多个参数,nth 类型为 Number 或 String 类型的数字,其他参数的值类型必须为 String,传入其他类型将报错,返回 String

语法

sql
elt(nth expr | columnName, str1: expr | columnName [, str2: expr | columnName...])

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT elt(1, "A", "B") 

┌─elt(1, "A", "B") ───────┐
│ A                       │
└─────────────────────────┘

field

获取 target 在第二个参数以后得参数列表中的位置,可接收多个参数,所有参数值类型须一致,返回 Int64,若不存在,则返回 0

语法

sql
field(target: expr | columnName, str1: expr | columnName [, str2: expr | columnName])

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 Int64 类型

示例

sql
> SELECT field("A", "B", "A")

┌─field("A", "B", "A") ─────────┐
2
└───────────────────────────────┘

lcase/lower

将参数 s 转为小写,接收 1 个 String 参数,返回 String

语法

sql
lcase/lower(s: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
SELECT lower("A"), lcase("A")

┌─lower("A") ───────┬─────lcase("A")─────┐
│ a                 │     a              |
└───────────────────┴────────────────────┘

left

返回第一个参数 s 最左边的 N 个字符,如果 N 大于第一个参数的长度,则返回第一个参数

语法

sql
left(s: expr | columnName, N: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT left("ABCD", 2)

┌─left("ABCD", 2) ─────────┐
│ AB                       │
└──────────────────────────┘

返回第一个参数 s 最右边的 N 个字符,如果 N 大于第一个参数的长度,则返回第一个参数

语法

sql
right(s: expr | columnName, N: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT right("ABCD", 2)

┌─right("ABCD", 2)─────────┐
│ CD                       │
└──────────────────────────┘

length/strlen

返回传入参数 s 的字节长度,s 类型为 String,返回 Int64

语法

sql
length/strlen(s: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 Int64 类型

示例

sql
> SELECT length("ABCD"), strlen("ABCD")

┌─length("ABCD")───┬─strlen("ABCD")───┐
44            |
└──────────────────┴──────────────────┘
sql
> SELECT length("麦杰科技"), strlen("麦杰科技")
┌─length("麦杰科技")─┬─strlen("麦杰科技")───┐
1212             |
└───────────────────┴────────────────────┘

locate

从第二个参数 str 中获取第一个参数 substr 的开始的位置 返回 Int64
如果 pos 不为空,则返回第二个参数 substr 从 pos 以后字符串中第一个参数 substr 开始的位置

语法

sql
locate(substr: expr | columnName, str: expr | columnName [, pos: expr | columnName])

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 Int64 类型

示例

sql
> SELECT locate("bar", "foobarbar")

┌─locate("bar", "foobarbar")─────────┐
4
└────────────────────────────────────┘
sql
> SELECT locate("bar", "foobarbar", 5)

┌─locate("bar", "foobarbar", 5)─────────┐
7
└───────────────────────────────────────┘

lpad

在第一个参数 str 的左边填充第三个参数 padstr,使第一个参数 str 的长度达到第二个参数 len,第二个参数 len 类型需为 Number,返回 String
若第二个参数 len 的值小于第一个参数 str 的长度,则返回第一个参数 str 到第二个参数 len 的值的子串

语法

sql
lpad(str: expr | columnName, len: expr | columnName, padstr: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT lpad("hi", 4, "?")

┌─lpad("hi", 4, "?")───────┐
│ ??hi                     │
└──────────────────────────┘
sql
> SELECT lpad("hi", 1, "?")

┌─lpad("hi", 1, "?")──────┐
│ h                       │
└─────────────────────────┘

ltrim

去除参数 str 左边的空格,如果传入 NULL,则返回 NULL

语法

sql
ltrim(str: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT ltrim("  foobar")

┌─ltrim("  foobar")───────┐
│ foobar                  │
└─────────────────────────┘

mid

从字符串 strpos 位置截取长度为 len 的子字符串

语法

sql
mid(str: expr | columnName, pos: expr | columnName, len: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT mid("foobar", 2, 3)

┌─mid("foobar", 2, 3)───────┐
│ oob                       │
└───────────────────────────┘

oct

N 为 Number 时,返回 N 的八进制字符串,当传入 NULL 时,返回 NULL

语法

sql
oct(N: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT oct(100)

┌─oct(100)───────┐
144
└────────────────┘

repeat

将字符串 s 重复 N

语法

sql
repeat(s: expr | columnName, N: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT repeat("AB", 2)

┌─repeat("AB", 2)───────┐
│ ABAB                  │
└───────────────────────┘

replace

将字符串 s2 替代字符串 s 中的字符串 s1

语法

sql
replace(s: expr | columnName, s1: expr | columnName, s2: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT replace("magus", "a", "8")

┌─replace("magus", "a", "8")───────┐
│ m8gus                            │
└──────────────────────────────────┘

reverse

将字符串 s 的顺序翻转

语法

sql
reverse(s: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT reverse("magus") 

┌─reverse("magus") ───────┐
│ sugam                   │
└─────────────────────────┘

rtrim

去除字符串 s 尾部的空格

语法

sql
rtrim(s: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT rtrim("magus ")

┌─rtrim("magus ")───────┐
│ magus                 │
└───────────────────────┘

space

返回 N 个空格

语法

sql
space(N: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT space(3)

┌─space(3)─────────┐
"   "
└──────────────────┘

strcmp

比较字符串 s1s2,如果相等返回 0,如果 s1 > s2 返回 1,如果 s1 < s2 返回 0,返回值类型为 Int64,如果 s1, s2 均为 NULL, 则返回 NULL

语法

sql
strcmp(s1: expr | columnName, s2: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 Int64 类型

示例

sql
> SELECT strcmp("magus", "magus")

┌─strcmp("magus", "magus")─────────┐
0
└──────────────────────────────────┘

substr/substring

从字符串 sstart 位置截取长度为 length 的子字符串,从 1 开始计数

length 参数可选,当不传入时返回从 start 开始到字符串尾部的子字符串

语法

sql
substr/substring(s: expr | columnName, start: expr | columnName[, length: expr | columnName])

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT substr("magus", 2, 3), substring("magus", 2, 3), substr("magus", 2), substring("magus", 2)

┌─substr("magus", 2, 3)─┬─substring("magus", 2, 3)─┬─substr("magus", 2)─┬─substring("magus", 2)─┐
│ agu                   │     agu                  |  agus              |  agus                 |
└───────────────────────┴──────────────────────────┴────────────────────┴───────────────────────┘

substring_index

返回从字符串 s 的第 count 个出现的分隔符 delimiter 之后的子串。

如果 count 是正数,返回第 count 个字符左边的字符串。
如果 count 是负数,返回第 (count 的绝对值 (从右边数)) 个字符右边的字符串。

语法

sql
substring_index(str: expr | columnName, delimiter: expr | columnName, count: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT substring_index("magus", "a", 1) 

┌─substring_index("magus", "a", 1)───────┐
│ m                                      │
└────────────────────────────────────────┘
sql
> SELECT substring_index("magus", "a", -1)
┌─substring_index("magus", "a", -1)───────┐
│ gus                                     │
└─────────────────────────────────────────┘

trim

去掉字符串 s 开始和结尾处的空格

语法

sql
trim(s: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT trim(" magus ")

┌─replacetrim(" magus ")──┐
│ magus                   │
└─────────────────────────┘

upper/ucase

将字符串 s 转为大写

语法

sql
upper/ucase(s: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT upper/ucase("magus")

┌─upper/ucase("magus")────┐
│ MAGUS                   │
└─────────────────────────┘

hex

将字符串或数字转为 16 进制

语法

sql
hex(str: expr | columnName)
hex(N: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT hex("abc") 

┌─hex("abc") ───────┐
616263
└───────────────────┘
sql
> SELECT hex(321) 
┌─hex(321)───────┐
141
└────────────────┘

unhex

将参数中的每对十六进制数字解释为一个数字,并将其转换为该数字表示的字符。

语法

sql
unhex(s: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT unhex("616263")

┌─unhex("616263")───────┐
│ abc                   │
└───────────────────────┘

rpad

在第一个参数 str 的右边填充第三个参数 padstr,使第一个参数 str 的长度达到第二个参数 len,第二个参数 len 类型需为 Number,返回 String
若第二个参数 len 的值小于第一个参数 str 的长度,则返回第一个参数 str 到第二个参数 len 的值的子串

语法

sql
rpad(str: expr | columnName, len expr | columnName, padstr expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT rpad("hi", 4, "?")

┌─rpad("hi", 4, "?")──────┐
│ hi??                    │
└─────────────────────────┘
sql
> SELECT rpad("hi", 1, "?")

┌─rpad("hi", 1, "?")──────┐
│ h                       │
└─────────────────────────┘

bit_length

返回 str 的字节长度,类型为 Int64。如果 strNULL,则返回 NULL

语法

sql
bit_length(str: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT bit_length("text")

┌─bit_length("text")───────┐
32
└──────────────────────────┘

char_length/character_length

返回 str 的字符长度,类型为 Int64

语法

sql
char_length/ character_length(str: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 Int64 类型

示例

sql
> SELECT char_length("magus")

┌─replace("magus", "a", "8")─────────┐
5
└────────────────────────────────────┘
sql
> SELECT char_length("麦杰科技")

┌─char_length("麦杰科技")─────────┐
4
└────────────────────────────────┘

find_in_set

找到 strstrList 中的位置,strList 需为以 , 分割的字符串。未找到返回 0。
如果 strstrList 皆为 NULL,则返回 NULL

语法

sql
find_in_set(str: expr | columnName, strList: expr | columnName)

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 Int64 类型

示例

sql
> SELECT find_in_set("a", "m,a,g,u,s")

┌─find_in_set("a", "m,a,g,u,s")─────────┐
2
└───────────────────────────────────────┘

to_string/ tostring

any 参数转为 String,如果未传入 sep 参数,则分隔符默认为 ,

语法

sql
to_string/ tostring(any: expr | columnName[, sep: expr | columnName])

参数

  • expr - 表达式。
  • columnName - 字段名或字段别名。

返回值

  • 如果任一参数为 NULL,返回 NULL
  • 返回 String 类型

示例

sql
> SELECT to_string/tostring(now())

┌─to_string/tostring(now())──────────────┐
2024-03-09 18:06:58.6259823+08:00
└────────────────────────────────────────┘