![]() |
![]() |
![]() |
Строковые функции В PostgreSQL существует множество разнообразных строковых функций, предназначенных для форматирования, анализа и сравнения строк. К их числу относятся как функции стандарта SQL92, так и нестандартные расширения PostgreSQL (например, ItrimO, rtrimO и substrO). Строковые функции PostgreSQL перечислены в табл. 5.10. В общем случае все, что говорится о типе text, в равной степени относится к значениям типа character и varchar. Таблица 5.10. Строковые функции
Ниже приведены более подробные описания всех функций, перечисленных в таблице, с указанием аргументов, типов данных и выполняемых действий. ascii() Синтаксис: ascii(s) Функция asci i () получает один аргумент — отдельный символ или строку типа text, и возвращает числовой ASCII-код первого интерпретированного символа. Результат возвращается в виде значения типа integer. Пример booktown=# SELECT asciitТ); ascii 84 (1 row) booktown=# SELECT DISTINCT ON (substr) booktown-# title. substrCtitle, 1, 1), booktown-# ascii(tltle) booktown-# FROM books booktOMl-f ORDER BY substr ASC: title | substr ascii 2001: A Space Odyssey | 2 | 50 Bartholomew and the Oobleck j В I 66 Dune |D 68 Franklin in the Dark | 70 Goodnignt Moon | G j 71 Little Women L 76 Practical PostgreSQL | P j 80 The Shining Т 84 (8 rows) btrim() Синтаксис: btrim(s) btrim(s. t) Функция получает один или два аргумента типа text, второй аргумент t не является обязательным. Если аргумент t задан, функция удаляет в начале и в конце строки s все символы, входящие в строку t. Если функция вызвана с одним аргументом, удаляются начальные и конечные пропуски — пробелы, символы табуляции и т. д. Порядок перечисления символов в строке t для функции btrim() значения не имеет. В начале и конце строки s удаляются подстроки, полностью состоящие из символов, входящих в строку t. Пример booktown=# SELECT btrimC whitespace example ') AS trim_blanks, booktown-# btr1m('123example 332', '123') AS trimjnumbers: trim_blanks | trim_numbers whitespace example example (1 row) char_length() Синтаксис: charjength(s) Функция SQL92 char_l engthC) получает один аргумент s типа text, varchar или character и возвращает длину полученной строки в символах. Возвращаемое значение относится к типу integer. Пример booktown=# SELECT charjength(title). title booktown-l FROM books Dooktown-# LIMIT 3: charjength | title 11 | The Shining 4 Dune 21 I 2001: A Space Odyssey (3 rows) chr() Синтаксис: chr(n) Функция chr() получает один числовой аргумент п типа integer и возвращает символ с ASCII-кодом, равным п. Возвращаемое значение относится к типу text. Функция chr() фактически является обратной по отношению к функции asci 1 (). Примеры booktowrHf SELECT chr(65), ascii('A'); chr ! ascii A | 65 (1 row) initcap() Синтаксис: initcap(s) Функция initcapO получает один аргумент s типа text, преобразует первые буквы всех слов к верхнему регистру и возвращает полученную строку. В данном контексте «словом» считается любая последовательность символов, отделенная от других слов пробелами. Пример booktown=# SELECT initcapCa prospective book title'): initcap A Prospective Book Title (1 row) length() Синтаксис: length(s) Аналог функции SQL92 charj ength(). Получает один аргумент s типа text, varchar или character и возвращает длину полученной строки в символах в виде значения типа integer. Пример booktown=# SELECT length(title), title booktown-# FROM books booktown-# LIMIT 3; length title 11 | The Shining 4 I Dune 21 | 2001: A Space Odyssey (3 rows) ПРИМЕЧАНИЕ В стандарт SQL92 включены две функции определения длины строки: char_length() и octet_length(). Следовательно, эти две функции с большей, чем функция length(), вероятностью будут поддерживаться другими реляционными СУБД. like() и ilike() Синтаксис: s like (f) s LIKE f like(s.f) s ilike(f) s HIKE f Функция 1 i ke() проверяет, совпадает ли выражение, заданное аргументом f, со строкой s. При вызове функции либо передаются два аргумента типа text, либо используется специальный синтаксис SQL, в котором аргумент s предшествует имени функции. Функция 11 i ke() является нестандартной версией функции 11 ke(), игнорирующей регистр символов при сравнении, и вызывается только в синтаксисе SQL. ПРИМЕЧАНИЕ Ключевое слово SQL LIKE в PostgreSQL заменяется вызовом функции likeO. Возможность использования ключевого слова LIKE без круглых скобок — всего лишь синтаксическое удобство, на практике оба варианта эквивалентны. Использование функции 1 ike() отличается от обычного сравнения с помощью оператора =, поскольку строка f может содержать символы подчеркивания (_) или процента (%), интерпретируемые особым образом. PostgreSQL интерпретирует символ _ как один произвольный символ, а символ % — как ноль или более произвольных символов. Эти специальные символы могут находиться в любом месте строки f. В PostgreSQL существуют и более совершенные средства поиска по шаблону, о которых говорилось в пункте «Операторы регулярных выражений» подраздела «Строковые операторы» раздела «Операторы» этой главы. Примеры booktown=# SELECT * FROM books booktown-# WHERE title LIKE ('XRabbit1): id i title | authorjd subjectjd 1234 | The Velveteen Rabbit | 25041 | 3 (1 row) booktown=# SELECT * FROM books booktown-# WHERE title LIKE id | title | authorjd | subjectjd 4513 | Dune | 1866 | 15 25908 | Franklin in the Dark | 15990 | 2 (2 rows) booktown=# SELECT * FROM books booktown-# WHERE title ILIKE '«python*': id | title | authorjd | subjectjd 41473 | Programming Python | 7805 | 4 41477 Learning Python | 7805 4 (2 rows) lower() Синтаксис: lower(s) Функция SQL92 1 ower () получает один аргумент типа text, преобразует все символы строки к нижнему регистру и возвращает полученную строку в виде значения типа text. Пример booktown=# SELECT lower(title) booktown-# FROM books booktown-# LIMIT 3; lower tne shining dune 2001: a space odyssey lpad() Синтаксис: lpad(s. n) 1pacl(s. n. c) Функция lpad() вызывается с двумя или тремя аргументами s, n и с (необязательный аргумент), относящимися к типам text, Integer и text соответственно. Строка s дополняется слева до длины n символов пробелами или содержимым необязательного аргумента с. Если начальная длина строки s больше п, строка усекается справа до длины п. Пример booktown=# SELECT title. IpadCtitle, 12, AS dashed, booktown-# IpadCtitle. 12. '-+-') AS pius_dashed booktown-# FROM books LIMIT 4; title | dashed | plus_dashed _ The Shining | -The Shining | -The Shining Dune |Dune Dune 2001: A Space Odyssey | 2001: A Spac | 2001: A Spac The Cat in the Hat | The Cat in t | The Cat in t (4 rows) Itrim() Синтаксис: Itrim(s) ItrimCs. f) Функция 11 ri m() получает один или два аргумента типа text (аргумент f не обязателен). Если аргумент f не задан, функция возвращает строку s, из которой удалены все начальные пробелы. В противном случае удаляется начальная подстрока, состоящая только из символов, содержащихся в f. Если такая подстрока не найдена, s остается без изменений. Примеры booktown=# SELECT ItrimC whitespace example'): Itrim whitespace example (1 row) booktown=# SELECT title. ItrimCtitle, 'TD2he ') booktown-# FROM books booktown-# LIMIT 4: title | Itritn The Shining | Shining Dune I une 2001: A Space Odyssey | 001: A Space Odyssey The Cat in the Hat j Cat In the Hat (4 rows) octet_length() Синтаксис: octetjength(s) Функция SQL92 octetj ength() получает один аргумент s типа text, varchar или character и возвращает длину полученной строки в байтах. Возвращаемое значение относится к типу integer. В большинстве случаев длина строки в байтах совпадает с количеством символов, хотя в расширенных кодировках не всегда, поскольку в них символ по определению может состоять из нескольких байтов. Пример booktown=# SELECT title, octetjength(title) booktown-# FROM books booktown-# ORDER BY title ASC booktown-# LIMIT 3: title octet Jength 2001: A Space Odyssey | 21 Bartholomew and the Oobleck | 27 Dune | 4 (3 rows) position() Синтаксис: position(b IN s) Функция SQL92 position^) получает два аргумента, относящихся к типу text, и возвращает начальную позицию подстроки b в строке s (отсчет начинается с 1). Возвращаемое значение относится к типу i nteger. Если подстрока не найдена, функция возвращает 0. Пример booktown=# SELECT title, positiorK'the' IN title) AS the_pos booktown-# FROM books booktown-# WHERE positionCthe1 IN title) != 0: title | the_pos The Cat in the Hat | 12 Bartholomew and the Oobleck | 17 Franklin in the Dark 13 (3 rows) repeat() Синтаксис: repeat(s. n) Функция repeat О получает два аргумента s и п, относящихся к типам text и integer соответственно. Функция возвращает символьную строку s, повторенную п раз, в виде значения типа text. Пример booktown=# SELECT repeat(lastjname. 2) booktown-l FROM authors booktown-# LIMIT 3; repeat DenhamDenham BourgeoisBourgeois BiancoBianco (3 rows) rpad() Синтаксис: rpad(s. n) rpad(s. n. c) Функция rpadO похожа на функцию IpadO, но дополняет строку справа, а не слева. Она вызывается с двумя или тремя аргументами s, n и с (необязательный аргумент), относящимися к типам text, integer и text соответственно. Строка s дополняется справа до длины п символов пробелами или содержимым необязательного аргумента с. Если начальная длина строки s больше п, строка усекается слева до длины п. Пример booktown=# SELECT rpad('whitespace example'. 30): rpad whitespace example (1 row) booktown=# SELECT title. rpacKtitle. 12, ' -') AS right_dashed. booktown-# rpad(title, 12, '-+-') AS right_plus_dashed booktown-# FROM books booktown-f LIMIT 3: title [ right_dashed | right_plus_dashed The Shining The Shining- | The Shining-Dune Dune 2001: A Space Odyssey 2001: A Spac 2001: A Spac (3 rows) rtrim() Синтаксис: rtrim(s) trlm(s. f) Функция rtri m() получает один или два аргумента типа text (аргумент f не обязателен). Если аргумент f не задан, функция возвращает строку s, из которой удалены все завершаю nine пробелы. В противном случае удаляется завершающая подстрока, состоящая только из символов, содержащихся в f. Если такая подстрока не найдена, s остается без изменений. Примеры booktown=# SELECT rtrimC'whitespace example '); rtrim whitespace example (1 row) booktown=# SELECT title, rtrinKtitle, 'yes') booktown-# FROM books booktown-# LIMIT 4; title rtrim The Shining | The Shining Dune Dun 2001: A Space Odyssey 2001: A Space Od The Cat in the Hat j The Cat in the Hat (4 rows) strpos() Синтаксис: strpos(s. b) Функция strposO эквивалентна функции SQL92 positionO, но аргументы передаются ей в стиле С. Функция получает два аргумента, относящихся к типу text, и возвращает начальную позицию подстроки b в строке s (отсчет начинается с 1). Возвращаемое значение относится к типу 1 nteger. Если подстрока не найдена, функция возвращает 0. Пример booktown=# SELECT title, strposdower(title), 'rabbit') booktown-l FROM books booktown-# WHERE strposdower(title), 'rabbit') != 0; title | strpos The Velveteen Rabbit | 15 (1 row) substr() Синтаксис: substr(s. n) substr(s. n. 1) Функция substrO эквивалентна функции SQL92 substring!), но аргументы передаются ей в стиле С. Функция вызывается с двумя или тремя аргументами s, n и 1 (необязательный аргумент), относящимися к типам text, т nteger и i nteger соответственно. Возвращаемое значение представляет собой подстроку s, начинающуюся с позиции п. Необязательный аргумент 1 определяет максимальную длину подстроки в символах. Если заданная длина подстроки превышает количество оставшихся символов в строке s, возвращается только остаток строки. Иначе говоря, возвращаемое значение не дополняется до заданной длины. Пример booktown=# SELECT title, substr(title, 15). substr(title. 5. 9) booktown-# FROM books booktown-# ORDER BY title DESC booktown-# LIMIT 3; title | substr | substr The Velveteen Rabbit Rabbit | Velveteen The Tell-Tale Heart Heart Tell-Tale The Shining | | Shining (3 rows) substring() Синтаксис: substrts. n) substr(s, n. 1) Функция SQL92 substring() эквивалентна функции PostgreSQLsubstr(). Функция вызывается с двумя или тремя аргументами s, n и 1 (необязательный аргумент), относящимися к типам text, integer и integer соответственно. Возвращаемое значение представляет собой подстроку s, начинающуюся с позиции п. Необязательный аргумент 1 определяет максимальную длину подстроки в символах. Примеры booktown=# SELECT title, substring(title FROM 15) booktown-# FROM books booktown-* ORDER BY title DESC booktown-# LIMIT 3; title | substring The Velveteen Rabbit | Rabbit The Tell-Tale Heart Heart The Shining (3 rows) booktown=# SELECT title, substring(title FROM 5 FOR 9) booktown-# FROM books booktown-# ORDER BY title DESC booktown-# LIMIT 3; title | substring The Velveteen Rabbit Velveteen The Tell-Tale Heart Tell-Tale The Shining | Shining (3 rows) to_ascii() Синтаксис: to_ascii(s, f) Функция to_asci i () получает строковый аргумент s, относящийся к типу text, и обозначение расширенной кодировки f, а возвращает обычный ASCII-текст в виде значения типа text. Допустимы следующие обозначения расширенных кодировок: LATIN1 (ISO 8859-1), LATIN2 (ISO 8859-2) и WIN1250 (Windows CP1250 или WinLatin2). Для работы функции необходима поддержка расширенных кодировок (устанавливается при помощи ключа командной строки компилятора при установке PostgreSQL). Пример booktown=# SELECT to_ascii('Multibyte Source', 'LATIN1'); to_ascii Multibyte Source (1 row) translate() Синтаксис: translate(s. f. r) Функция transl ate() получает три аргумента s, f и г, относящихся к типу text. В строке s все символы, входящие в строку f, заменяются символами с тем же индексом из строки г. Возвращаемое значение относится к типу text. Обратите внимание: функция заменяет не экземпляры всей строки f, а любые символы, входящие в эту строку. Если f содержит больше символов, чем г, то все символы f, не имеющие аналогов в г, просто удаляются из s (удобный способ удаления ненужных символов). В следующем примере все вопросительные знаки заменяются восклицательными. Пример booktown=# SELECT translated am an example?', '?', '!'): translate I am an example! (1 row) В следующем примере все вхождения символа «i» заменяются символом «w», а все вхождения символа «s» — символом «а». Лишний символ в конце строки «was» игнорируется. Пример booktown=# SELECT translate('This is a mistake.', 'is', 'was'); translate Thwa wa a mwatake. (1 row) В последнем примере все гласные буквы заменяются пустой строкой, то есть удаляются из входной строки. Пример booktown=# SELECT title. booktown-# translateCtitle, 'aeiouAEIOU', '') AS vowelless booktown-# FROM books booktown-f LIMIT 5; title | vowelless The Shining Th Shnng Dune I Dn 2001: A Space Odyssey | 2001: Spc dyssy The Cat In the Hat | Th Ct n th Ht Bartholomew and the Oobleck Brthlmw nd th blck (5 rows) trim() Синтаксис: trim(направление f FROM s) Функция SQL92 trim() способна заменить функции PostgreSQL rtrim(), ltrim() и btrim(). При вызове она получает три аргумента: ключевое слово (LEADING, TRAILING или BOTH) и две строки, f и s. С ключевым словом LEADING функция trim() работает аналогично функции ItrimO, удаляя в начале строки s наибольшую подстроку, все символы которой входят в f. С ключевым словом TRAILING функция trim() работает аналогично функции rtrim(), удаляя в конце строки s наибольшую подстроку, все символы которой входят в f. С ключевым словом BOTH функция trim() работает аналогично функции btrim(), удаляя в начале и в конце строки s наибольшие подстроки, все символы которых входят в f. Примеры booktowrH1 SELECT isbn, trim(LEADING '0' FROM isbn) booktown-# FROM editions booktown-# LIMIT 2; isbn | Itrim 039480001X 39480001X 0451160916 451160916 (2 rows) booktown=# SELECT isbn, trimCTRAILING 'X' FROM isbn) booktown-# FROM editions booktown-# LIMIT 2; 1Sbn rtrim 039480001X j 039480001 0451160916 j 0451160916 (2 rows) booktowrHf SELECT isbn, trimCBOTH 'OX' FROM isbn) booktown-# FROM editions booktown-# LIMIT 2; isbn I btrim 039480001X | 39480001 0451160916 | 451160916 (2 rows) upper() Синтаксис: upper(s) Функция SQL92 upper() получает один аргумент типа text, преобразует все символы строки к верхнему регистру и возвращает полученную строку в виде значения типа text. Пример booktown=# SELECT title, upper(title) booktown-# FROM books booktown-# ORDER BY id ASC booktown-# LIMIT 3; title | upper The Tell-Tale Heart | THE TELL-TALE HEART Little Women j LITTLE WOMEN The Velveteen Rabbit | THE VELVETEEN RABBIT (3 rows) |
![]() |
![]() |
![]() |