六、clickhouse字符串函數


-- 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>')─┐
│ &lt;name&gt;                 │
└──────────────────────────────┘
*/

SELECT decodeXMLComponent('&lt;name&gt;');
/*
┌─decodeXMLComponent('&lt;name&gt;')─┐
│ <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')─┐
│                                             32 │
└───────────────────────────────────────────────┴──────────────────────────────────────────────┘

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. 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM