Skip to main content

Scalar Functions — String

String scalar functions cover manipulation, searching, encoding, parsing, and formatting of text values. ClickHouse and DuckDB have the broadest support. Several functions — including split(), replace_regex(), extract(), and all encoding functions — are unavailable in SQLite.

Legend: ✅ Supported · ⚠️ Approximated · ❌ Not Supported · 🔄 Rewritten

FunctionSQLiteMySQLClickHousePostgreSQLDuckDBNotes
strlen()length()
toupper()upper()
tolower()lower()
substring()substr(); ClickHouse index offset corrected; DuckDB 0-based (no offset)
indexof()0-based; occurrence arg not supported with warning
strcat()SQLite/Postgres/DuckDB: ||; MySQL: concat() with NULL warning
strcat_delim()concat_ws()
strcat_array()Postgres/DuckDB: array_to_string; ClickHouse: arrayStringConcat
split()Postgres: string_to_array; DuckDB: string_split; ClickHouse: splitByString
replace_string()replace()
replace_regex()SQLite: unsupported
reverse()SQLite: unsupported (no built-in reversal)
trim()With regex arg: ClickHouse/Postgres/MySQL/DuckDB only (not SQLite)
trim_start()ltrim() / trimLeft()
trim_end()rtrim() / trimRight()
isempty()ClickHouse: isNull OR empty
isnotempty()
isnull()IS NULL
isnotnull()IS NOT NULL
countof()⚠️⚠️ClickHouse: countSubstrings(); Postgres/DuckDB: length-delta count — counts non-overlapping matches only (KQL counts overlapping), ignores the kind argument, and an empty needle errors
strrep()repeat()
strcmp()CASE-based −1/0/1
extract()SQLite: unsupported; DuckDB: regexp_extract
extract_all()ClickHouse: extractAll(); DuckDB: regexp_extract_all()
translate()
url_encode()ClickHouse: encodeURLComponent; DuckDB: url_encode
url_decode()ClickHouse: decodeURLComponent; DuckDB: url_decode
base64_encode_tostring()ClickHouse: base64Encode; DuckDB: base64() (BLOB cast)
base64_decode_tostring()ClickHouse: base64Decode; DuckDB: from_base64
parse_json()
parse_url()DuckDB: regex-based; Scheme/Host/Port/Path/Query/Fragment only
parse_urlquery()
normalize_path()⚠️⚠️⚠️⚠️ClickHouse: replaceAll + replaceRegexpAll; Postgres/DuckDB: replace + regexp_replace; MySQL: REPLACE + REGEXP_REPLACE; all with warning