-- 1.字符串長度
SELECT length('hello world') as str_length, -- 按照Unicode編碼計算長度“你好”的長度為6 empty('hello world'),-- 判斷字符串是否為空,空為1,非空為0 notEmpty('hello world'), lengthUTF8('hello world'), -- 按照實際字符計算長度“你好”為2 char_length('hello world'), -- 同 lengthUTF8() character_length('hello world'), -- 同 lengthUTF8(), lower('abcd123--'),--字母全部小寫(將字符串中的ASCII轉換為小寫。) upper('abcd123--'),--字母全部大寫(將字符串中的ASCII轉換為大寫。) lowerUTF8('abcd123-/*\8asd-\\'), -- abcd123-/*8asd-\ upperUTF8('abcd123--'), -- ABCD123-- isValidUTF8('abcd123--/*\*'); --檢查字符串是否為有效的UTF-8編碼,是則返回1,否則返回0。 SELECT notEmpty(''), notEmpty(NULL), notEmpty('he'); -- 0,空,1 SELECT toValidUTF8('\x61\xF0\x80\x80\x80b'); -- reverseUTF8():以Unicode字符為單位反轉UTF-8編碼的字符串。如果字符串不是UTF-8編碼,則可能獲取到一個非預期的結果(不會拋出異常) SELECT reverse('abcdefg'), reverseUTF8('abcdefg');
-- 2.字符串維度自定義安排
SELECT format('{1} {0} {1}', 'World', 'Hello'); -- 輸出:Hello World Hello SELECT format('{0} {0} {1} {1}', 'one', 'two'); -- 輸出:one one two two SELECT format('{} {}', 'Hello', 'World'); -- 輸出:Hello World
-- 3.字符串拼接 concat(s1,s2,s3,...)
SELECT concat('Hello',' ','World', '!');-- Hello World! -- 與concat相同,區別在於,你需要保證concat(s1, s2, s3) -> s4是單射的,它將用於GROUP BY的優化。 SELECT concatAssumeInjective('Hello',' ','World', '!');-- Hello World!
-- 4.字符串截取:substring(s, offset, length), mid(s, offset, length), substr(s, offset, length)
-- 以字節為單位截取指定位置字符串,返回以‘offset’位置為開頭,長度為‘length’的子串。‘offset’從1開始(與標准SQL相同)。‘offset’和‘length’參數必須是常量。 SELECT substring('abcdefg', 1, 3),-- abc substring('你好,世界', 1, 3),-- 你 substringUTF8('你好,世界', 1, 3); -- 你好,
-- 5.字符串拼接:appendTrailingCharIfAbsent(s, c)
-- 如果‘s’字符串非空並且末尾不包含‘c’字符,則將‘c’字符附加到末尾。 SELECT appendTrailingCharIfAbsent('good','c'), -- goodc appendTrailingCharIfAbsent('goodccc','c'); -- goodccc
-- 6.字符串編碼轉換:convertCharset(s, from, to) 返回從‘from’中的編碼轉換為‘to’中的編碼的字符串‘s’。
SELECT convertCharset('hello', 'UTF8','Unicode'),-- ��h convertCharset('hello', 'Unicode', 'UTF8'),-- 橋汬� convertCharset('hello', 'Unicode', 'ASCII'),-- convertCharset('hello', 'ascii', 'ascii'),--hello convertCharset('hello', 'UTF8','UTF8');-- hello SELECT base64Encode('username+password'),-- dXNlcm5hbWUrcGFzc3dvcmQ= base64Decode('dXNlcm5hbWUrcGFzc3dvcmQ='), -- username+password -- 使用base64將字符串解碼成原始字符串。但如果出現錯誤,將返回空字符串。 tryBase64Decode('dXNlcm5hbWUrcGFzc3dvcmQ=');
-- 7.判斷字符串是否已什么結尾或結束,返回1:true,0:flase
-- endsWith(s, suffix) 返回是否以指定的后綴結尾。如果字符串以指定的后綴結束,則返回1,否則返回0 -- startWith(s, prefix) 返回是否以指定的前綴開頭。如果字符串以指定的前綴開頭,則返回1,否則返回0。 SELECT endsWith('string','g'), startsWith('string', 'str'); -- 1 true
-- 8.刪除左側空白字符
-- trimLeft(s) 返回一個字符串,用於刪除左側的空白字符 -- trimRight(s) 返回一個字符串,用於刪除右側的空白字符 -- trimBoth(s) 返回一個字符串,用於刪除左側和右側的空白字符 SELECT trimLeft(' sdfdgs'), -- sdfdgs trimRight('abcd '), -- abcd trimBoth(' abcd '); -- abcd
--9.對字符串進行轉義以及反轉義
--encodeXMLComponent:對字符串進行轉義,針對 <、&、>、"、' 五種符號 --decodeXMLComponent:對字符串進行反轉義,針對 <、&、>、"、' 五種符號 SELECT encodeXMLComponent('<name>'); /* ┌─encodeXMLComponent('<name>')─┐ │ <name> │ └──────────────────────────────┘ */ SELECT decodeXMLComponent('<name>'); /* ┌─decodeXMLComponent('<name>')─┐ │ <name> │ └────────────────────────────────────┘ */
--10.bitSlice(s, offset, length)
--返回從“偏移”索引中的“長度”位長的位開始的子字符串。位索引從 1 開始
select bitSlice('98979777uu',3,6); SELECT bitSlice('98979777uu', 3, 6) Query id: 103cfdcd-3bdf-48f9-8ae1-c9d8e87238a1 ┌─bitSlice('98979777uu', 3, 6)─┐ │ ➠ │ └──────────────────────────────┘ 1 rows in set. Elapsed: 0.002 sec.
--11.leftPad/rightPad
--可用於對某些敏感信息進行脫敏處理
SELECT leftPad(substring(phone,-3,3), length( phone ), '*') from (select '13126966152' phone); SELECT leftPad(substring(phone, -3, 3), length(phone), '*') FROM ( SELECT '13126966152' AS phone ) Query id: 128f77db-7396-4731-a77d-8c4aafda21de ┌─leftPad(substring(phone, -3, 3), length(phone), '*')─┐ │ ********152 │ └──────────────────────────────────────────────────────┘ 1 rows in set. Elapsed: 0.004 sec.
--12.countSubstrings/countSubstringsCaseInsensitive
--計算某個字符串中包含特定字符的數量
select countSubstrings('com.foo.com.bar.com', 'com') ,countSubstringsCaseInsensitive('BaBaB', 'A'); SELECT countSubstrings('com.foo.com.bar.com', 'com'), countSubstringsCaseInsensitive('BaBaB', 'A') Query id: f57c2361-e39c-44df-a8b1-2dfc2d9a9c41 ┌─countSubstrings('com.foo.com.bar.com', 'com')─┬─countSubstringsCaseInsensitive('BaBaB', 'A')─┐ │ 3 │ 2 │ └───────────────────────────────────────────────┴──────────────────────────────────────────────┘ 1 rows in set. Elapsed: 0.002 sec.
--13.countMatches
--基於正則表達式統計匹配數
select countMatches('foo.com bar.com baz.com bam.com', '([^. ]+)\.([^. ]+)'); SELECT countMatches('foo.com bar.com baz.com bam.com', '([^. ]+)\\.([^. ]+)') Query id: 06686144-3b42-4a3f-a3c8-b797d4d64916 ┌─countMatches('foo.com bar.com baz.com bam.com', '([^. ]+)\\.([^. ]+)')─┐ │ 4 │ └────────────────────────────────────────────────────────────────────────┘ 1 rows in set. Elapsed: 0.003 sec.
