mirror of
https://github.com/postgres/postgres.git
synced 2025-11-03 09:13:20 +03:00
Add SQL function CASEFOLD().
Useful for caseless matching. Similar to LOWER(), but avoids edge-case problems with using LOWER() for caseless matching. For collations that support it, CASEFOLD() handles characters with more than two case variations or multi-character case variations. Some characters may fold to uppercase. The results of case folding are also more stable across Unicode versions than LOWER() or UPPER(). Discussion: https://postgr.es/m/a1886ddfcd8f60cb3e905c93009b646b4cfb74c5.camel%40j-davis.com Reviewed-by: Ian Lawrence Barwick
This commit is contained in:
@@ -116,6 +116,11 @@ SELECT a, lower(x COLLATE "C"), lower(y COLLATE "C") FROM collate_test10;
|
||||
|
||||
SELECT a, x, y FROM collate_test10 ORDER BY lower(y), a;
|
||||
|
||||
SELECT lower('AbCd 123 #$% ıiIİ ẞ ß DŽDždž Σσς' COLLATE "en-x-icu");
|
||||
SELECT casefold('AbCd 123 #$% ıiIİ ẞ ß DŽDždž Σσς' COLLATE "en-x-icu");
|
||||
SELECT lower('AbCd 123 #$% ıiIİ ẞ ß DŽDždž Σσς' COLLATE "tr-x-icu");
|
||||
SELECT casefold('AbCd 123 #$% ıiIİ ẞ ß DŽDždž Σσς' COLLATE "tr-x-icu");
|
||||
|
||||
-- LIKE/ILIKE
|
||||
|
||||
SELECT * FROM collate_test1 WHERE b LIKE 'abc';
|
||||
|
||||
@@ -81,6 +81,9 @@ SELECT 'xAb' !~* '[c-d]' COLLATE PG_C_UTF8;
|
||||
SELECT 'Δ' ~* '[γ-λ]' COLLATE PG_C_UTF8;
|
||||
SELECT 'δ' ~* '[Γ-Λ]' COLLATE PG_C_UTF8; -- same as above with cases reversed
|
||||
|
||||
-- case folding
|
||||
select casefold('AbCd 123 #$% ıiIİ ẞ ß DŽDždž Σσς' collate PG_C_UTF8);
|
||||
|
||||
--
|
||||
-- Test PG_UNICODE_FAST
|
||||
--
|
||||
@@ -140,3 +143,6 @@ SELECT 'xAb' ~* '[W-Y]' COLLATE PG_UNICODE_FAST;
|
||||
SELECT 'xAb' !~* '[c-d]' COLLATE PG_UNICODE_FAST;
|
||||
SELECT 'Δ' ~* '[γ-λ]' COLLATE PG_UNICODE_FAST;
|
||||
SELECT 'δ' ~* '[Γ-Λ]' COLLATE PG_UNICODE_FAST; -- same as above with cases reversed
|
||||
|
||||
-- case folding
|
||||
select casefold('AbCd 123 #$% ıiIİ ẞ ß DŽDždž Σσς' collate PG_UNICODE_FAST);
|
||||
|
||||
Reference in New Issue
Block a user