下面来说一说字符串的相关操作。
empty:检测一个字符串是否为空,为空返回 1,不为空返回 0
notEmpty:检测一个字符串是否不为空,不为空返回 1,为空返回 0
SELECT empty(''), empty('satori');
/*
┌─empty('')─┬─empty('satori')─┐
│ 1 │ 0 │
└─────── ┴───────── ──┘
*/
SELECT notEmpty(''), notEmpty('satori');
/*
┌─notEmpty('')─┬─notEmpty('satori')─┐
│ 0 │ 1 │
└──────────┴──────────────┘
*/
length:计算一个字符串占多少个字节
char_length:计算一个字符串占多少个字符
WITH 'satori' AS s1, '古明地觉' AS s2
SELECT length(s1), length(s2), char_length(s1), char_length(s2)
/*
┌─length(s1)─┬─length(s2)─┬─CHAR_LENGTH(s1)─┬─CHAR_LENGTH(s2)─┐
│ 6 │ 12 │ 6 │ 4 │
└───── ───┴────────┴─────────────── ┴──────────── ──┘
*/
toString:将整型、日期转成字符串
SELECT toString(3), cast(3 AS String);
/*
┌─toString(3)─┬─CAST(3, 'String')─┐
│ 3 │ 3 │
└─────────┴─────────────┘
*/
除了使用 cast 之外,每种数据类型都内置了相应的转换函数,格式为 to + 类型,比如 toInt8、toUInt32、toFloat64、toDecimal64 等等
lower、lcase:字符串转小写
upper、ucase:字符串转大写
SELECT lower('SAtoRI'), upper('SAtoRI');
/*
┌─lower('SAtoRI')─┬─upper('SAtoRI')─┐
│ satori │ SATORI │
└────────────┴──────────── ┘
*/
repeat:将字符串重复 n 次
SELECT repeat('abc', 3);
/*
┌─repeat('abc', 3)─┐
│ abcabcabc │
└────────── ─ ┘
*/
reverse:将字符串翻转
SELECT reverse('satori');
/*
┌─reverse('satori')─┐
│ irotas │
└─────────── ─┘
*/
注意:reverse 是按照字节翻转的,这意味着它不能用在中文上面,如果想翻转中文,那么要使用 reverseUTF8,可以试一下。
format:格式化字符串
SELECT format('{}--{}', 'hello', 'world');
/*
┌─format('{}--{}', 'hello', 'world')─┐
│ hello--world │
└─────────────────────┘
*/
-- {} 的数量和格式化的字符串数量要匹配,当然下面这种情况例外
SELECT format('{0}--{1}--{0}', 'hello', 'world');
/*
┌─format('{0}--{1}--{0}', 'hello', 'world')─┐
│ hello--world--hello │
└──────────────────── ─────┘
*/
concat:拼接字符串