9.4. СÑÑоковÑе ÑÑнкÑии и опеÑаÑоÑÑ
Ð ÑÑом Ñазделе опиÑÐ°Ð½Ñ ÑÑнкÑии и опеÑаÑоÑÑ Ð´Ð»Ñ ÑабоÑÑ Ñ ÑекÑÑовÑми ÑÑÑоками. Ðод ÑÑÑоками в данном конÑекÑÑе подÑазÑмеваÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñипов character, character varying и text. ÐÑли не оÑмеÑено обÑаÑное, вÑе нижепеÑеÑиÑленнÑе ÑÑнкÑии ÑабоÑаÑÑ Ñо вÑеми ÑÑими Ñипами, Ñ
оÑÑ Ñ Ñипом character ÑледÑÐµÑ ÑÑиÑÑваÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñе ÑÑÑекÑÑ Ð°Ð²ÑомаÑиÑеÑкого Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑÑок пÑобелами. ÐекоÑоÑÑе из ÑÑиÑ
ÑÑнкÑий Ñакже поддеÑживаÑÑ Ð±Ð¸ÑовÑе ÑÑÑоки.
Ð SQL опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð½ÐµÑколÑко ÑÑÑоковÑÑ ÑÑнкÑий, в коÑоÑÑÑ Ð°ÑгÑменÑÑ ÑазделÑÑÑÑÑ Ð½Ðµ запÑÑÑми, а клÑÑевÑми Ñловами. Ðни пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.9. PostgreSQL Ñакже пÑедоÑÑавлÑÐµÑ Ð²Ð°ÑианÑÑ ÑÑÐ¸Ñ ÑÑнкÑий Ñ ÑинÑакÑиÑом, обÑÑнÑм Ð´Ð»Ñ ÑÑнкÑий (Ñм. ТаблиÑÑ 9.10).
ÐÑимеÑание
Ðо веÑÑии 8.3 в PostgreSQL ÑÑи ÑÑнкÑии Ñакже пÑозÑаÑно пÑинимали знаÑÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
не ÑÑÑоковÑÑ
Ñипов, неÑвно пÑÐ¸Ð²Ð¾Ð´Ñ ÑÑи знаÑÐµÐ½Ð¸Ñ Ðº ÑÐ¸Ð¿Ñ text. СейÑÐ°Ñ Ñакие пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸ÑклÑÑенÑ, Ñак как они ÑаÑÑо пÑиводили к неожиданнÑм ÑезÑлÑÑаÑам. Ðднако опеÑаÑÐ¾Ñ ÐºÐ¾Ð½ÐºÐ°ÑенаÑии ÑÑÑок (||) по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ðµ ÑолÑко ÑÑÑоковÑе даннÑе, еÑли Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ аÑгÑÐ¼ÐµÐ½Ñ Ð¸Ð¼ÐµÐµÑ ÑÑÑоковÑй Ñип, как показано в ТаблиÑе 9.9. Ðо вÑеÑ
оÑÑалÑнÑÑ
ÑлÑÑаÑÑ
Ð´Ð»Ñ Ð¿Ð¾Ð²ÑоÑÐµÐ½Ð¸Ñ Ð¿ÑедÑдÑÑего Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑебÑеÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ñвное пÑеобÑазование в text.
ТаблиÑа 9.9. СÑÑоковÑе ÑÑнкÑии и опеÑаÑоÑÑ ÑзÑка SQL
| ФÑнкÑÐ¸Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ | РезÑлÑÑÐ°Ñ |
|---|---|---|---|---|
| text | ÐонкаÑенаÑÐ¸Ñ ÑÑÑок | 'Post' || 'greSQL' | PostgreSQL |
или | text | ÐонкаÑенаÑÐ¸Ñ ÑÑÑок Ñ Ð¾Ð´Ð½Ð¸Ð¼ не ÑÑÑоковÑм опеÑандом | 'Value: ' || 42 | Value: 42 |
| int | ЧиÑло Ð±Ð¸Ñ Ð² ÑÑÑоке | bit_length('jose') | 32 |
или | int | ЧиÑло Ñимволов в ÑÑÑоке | char_length('jose') | 4 |
| text | ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑÑÑоки в нижний ÑегиÑÑÑ | lower('TOM') | tom |
| int | ЧиÑло Ð±Ð°Ð¹Ñ Ð² ÑÑÑоке | octet_length('jose') | 4 |
| text | ÐаменÑÐµÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ | overlay('Txxxxas' placing 'hom' from 2 for 4) | Thomas |
| int | Ðоложение Ñказанной подÑÑÑоки | position('om' in 'Thomas') | 3 |
| text | ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ | substring('Thomas' from 2 for 3) | hom |
| text | ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑооÑвеÑÑÑвÑÑÑÑÑ ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÑиле POSIX. ÐодÑобно ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² Разделе 9.7. | substring('Thomas' from '...$') | mas |
| text | ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑооÑвеÑÑÑвÑÑÑÑÑ ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÑиле SQL. ÐодÑобно ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² Разделе 9.7. | substring('Thomas' from '%#"o_a#"_' for '#') | oma |
| text | УдалÑÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑолÑко ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ characters (по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑобелÑ), Ñ Ð½Ð°Ñала (leading), Ñ ÐºÐ¾Ð½Ñа (trailing) или Ñ Ð¾Ð±ÐµÐ¸Ñ
ÑÑоÑон (both, (по ÑмолÑаниÑ)) ÑÑÑоки string | trim(both 'xyz' from 'yxTomxx') | Tom |
| text | ÐеÑÑандаÑÑнÑй ÑинÑакÑÐ¸Ñ trim() | trim(both from 'yxTomxx', 'xyz') | Tom |
| text | ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑÑÑоки в веÑÑ Ð½Ð¸Ð¹ ÑегиÑÑÑ | upper('tom') | TOM |
ÐÑоме ÑÑого, в PostgreSQL еÑÑÑ Ð¸ дÑÑгие ÑÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñо ÑÑÑоками, пеÑеÑиÑленнÑе в ТаблиÑе 9.10. ÐекоÑоÑÑе из Ð½Ð¸Ñ Ð¸ÑполÑзÑÑÑÑÑ Ð² каÑеÑÑве внÑÑÑенней ÑеализаÑии ÑÑандаÑÑнÑÑ ÑÑÑоковÑÑ ÑÑнкÑий SQL, пÑиведÑннÑÑ Ð² ТаблиÑе 9.9.
ТаблиÑа 9.10. ÐÑÑгие ÑÑÑоковÑе ÑÑнкÑии
| ФÑнкÑÐ¸Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ | РезÑлÑÑÐ°Ñ |
|---|---|---|---|---|
| int | ÐозвÑаÑÐ°ÐµÑ ASCII-код пеÑвого Ñимвола аÑгÑменÑа. ÐÐ»Ñ UTF8 возвÑаÑÐ°ÐµÑ ÐºÐ¾Ð´ Ñимвола в Unicode. ÐÐ»Ñ Ð´ÑÑÐ³Ð¸Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð±Ð°Ð¹ÑнÑÑ ÐºÐ¾Ð´Ð¸Ñовок аÑгÑÐ¼ÐµÐ½Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ ASCII-Ñимволом. | ascii('x') | 120 |
| text | УдалÑÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑоÑÑоÑÑÑÑ ÑолÑко из Ñимволов characters (по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ñобелов), Ñ Ð½Ð°Ñала и Ñ ÐºÐ¾Ð½Ñа ÑÑÑоки string | btrim('xyxtrimyyx', 'xyz') | trim |
| text | ÐозвÑаÑÐ°ÐµÑ Ñимвол Ñ Ð´Ð°Ð½Ð½Ñм кодом. ÐÐ»Ñ UTF8 аÑгÑÐ¼ÐµÐ½Ñ Ð²Ð¾ÑпÑинимаеÑÑÑ ÐºÐ°Ðº код Ñимвола Unicode, а Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ ÐºÐ¾Ð´Ð¸Ñовок он должен ÑказÑваÑÑ Ð½Ð° ASCII-Ñимвол. Ðод 0 (NULL) не допÑÑкаеÑÑÑ, Ñак как байÑÑ Ñ Ð½ÑлевÑм кодом в ÑекÑÑовÑÑ ÑÑÑÐ¾ÐºÐ°Ñ ÑÐ¾Ñ ÑаниÑÑ Ð½ÐµÐ»ÑзÑ. | chr(65) | A |
| text | СоединÑÐµÑ ÑекÑÑовÑе пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÑÐµÑ Ð°ÑгÑменÑов, игноÑиÑÑÑ NULL. | concat('abcde', 2, NULL, 22) | abcde222 |
| text | СоединÑÐµÑ Ð²Ñе аÑгÑменÑÑ, кÑоме пеÑвого, ÑеÑез ÑазделиÑелÑ, игноÑиÑÑÑ Ð°ÑгÑменÑÑ NULL. РазделиÑÐµÐ»Ñ ÑказÑваеÑÑÑ Ð² пеÑвом аÑгÑменÑе. | concat_ws(',', 'abcde', 2, NULL, 22) | abcde,2,22 |
| bytea | ÐÑеобÑазÑÐµÑ ÑÑÑÐ¾ÐºÑ string из кодиÑовки src_encoding в dest_encoding. ÐеÑÐµÐ´Ð°Ð½Ð½Ð°Ñ ÑÑÑока должна бÑÑÑ Ð´Ð¾Ð¿ÑÑÑимой Ð´Ð»Ñ Ð¸ÑÑ
одной кодиÑовки. ÐÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ CREATE CONVERSION. ÐÑе вÑÑÑоеннÑе пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.11. | convert('text_in_utf8'â, 'UTF8', 'LATIN1') | ÑÑÑока text_in_utf8, пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð² кодиÑовке Latin-1 (ISO 8859-1) |
| text | ÐÑеобÑазÑÐµÑ ÑÑÑÐ¾ÐºÑ string из кодиÑовки src_encoding в кодиÑÐ¾Ð²ÐºÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. ÐеÑÐµÐ´Ð°Ð½Ð½Ð°Ñ ÑÑÑока должна бÑÑÑ Ð´Ð¾Ð¿ÑÑÑимой Ð´Ð»Ñ Ð¸ÑÑ
одной кодиÑовки. | convert_from('text_in_utf8'â, 'UTF8') | ÑÑÑока text_in_utf8, пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð² кодиÑовке ÑекÑÑей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
|
| bytea | ÐÑеобÑазÑÐµÑ ÑÑÑÐ¾ÐºÑ Ð² кодиÑÐ¾Ð²ÐºÑ dest_encoding. | convert_to('некоÑоÑÑй ÑекÑÑ', 'UTF8') | некоÑоÑÑй ÑекÑÑ, пÑедÑÑавленнÑй в кодиÑовке UTF8 |
| bytea | ÐолÑÑÐ°ÐµÑ Ð´Ð²Ð¾Ð¸ÑнÑе даннÑе из ÑекÑÑового пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² string. ÐнаÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑа format Ñе же, ÑÑо и Ð´Ð»Ñ ÑÑнкÑии encode. | decode('MTIzAAE=', 'base64') | \x3132330001 |
| text | ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð´Ð²Ð¾Ð¸ÑнÑе даннÑе в ÑекÑÑовое пÑедÑÑавление в одном из ÑоÑмаÑов: base64, hex, escape. ФоÑÐ¼Ð°Ñ escape пÑеобÑазÑÐµÑ Ð½ÑлевÑе байÑÑ Ð¸ байÑÑ Ñ 1 в ÑÑаÑÑем биÑе в воÑÑмеÑиÑнÑе поÑледоваÑелÑноÑÑи \nnn и дÑблиÑÑÐµÑ Ð¾Ð±ÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ. | encode('123\000\001', 'base64') | MTIzAAE= |
| text | ФоÑмаÑиÑÑÐµÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ð² ÑооÑвеÑÑÑвии Ñо ÑÑÑокой ÑоÑмаÑа. ÐÑа ÑÑнкÑÐ¸Ñ ÑабоÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾ sprintf в ÑзÑке C. См. ÐодÑаздел 9.4.1. | format('Hello %s, %1$s', 'World') | Hello World, World |
| text | ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð¿ÐµÑвÑÑ Ð±ÑÐºÐ²Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñлова в ÑÑÑоке в веÑÑ Ð½Ð¸Ð¹ ÑегиÑÑÑ, а оÑÑалÑнÑе â в нижний. Словами ÑÑиÑаÑÑÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑи алÑавиÑно-ÑиÑÑовÑÑ Ñимволов, ÑазделÑннÑе лÑбÑми дÑÑгими Ñимволами. | initcap('hi THOMAS') | Hi Thomas |
| text | ÐозвÑаÑÐ°ÐµÑ Ð¿ÐµÑвÑе n Ñимволов в ÑÑÑоке. Ðогда n менÑÑе нÑлÑ, возвÑаÑаÑÑÑÑ Ð²Ñе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ñлева, кÑоме поÑледниÑ
|n|. | left('abcde', 2) | ab |
| int | ЧиÑло Ñимволов в ÑÑÑоке string | length('jose') | 4 |
| int | ЧиÑло Ñимволов, коÑоÑÑе ÑодеÑÐ¶Ð¸Ñ ÑÑÑока string в заданной кодиÑовке encoding. ÐеÑÐµÐ´Ð°Ð½Ð½Ð°Ñ ÑÑÑока должна бÑÑÑ Ð´Ð¾Ð¿ÑÑÑимой в ÑÑой кодиÑовке. | length('jose', 'UTF8') | 4 |
| text | ÐополнÑÐµÑ ÑÑÑÐ¾ÐºÑ string Ñлева до Ð´Ð»Ð¸Ð½Ñ length Ñимволами fill (по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ñобелами). ÐÑли длина ÑÑÑоки Ñже болÑÑе заданной, она обÑезаеÑÑÑ ÑпÑава. | lpad('hi', 5, 'xy') | xyxhi |
| text | УдалÑÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑолÑко ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ characters (по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑобелÑ), Ñ Ð½Ð°Ñала ÑÑÑоки string | ltrim('zzzytest', 'xyz') | test |
| text | ÐÑÑиÑлÑÐµÑ MD5-Ñ
ÐµÑ ÑÑÑоки string и возвÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ Ð² 16-ÑиÑном виде | md5('abc') | 90015098â3cd24fb0 d6963f7dâ28e17f72 |
| text[] | РаÑкладÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»Ð½Ñй иденÑиÑикаÑоÑ, задаваемÑй паÑамеÑÑом qualified_identifier, на маÑÑив иденÑиÑикаÑоÑов, ÑдалÑÑ ÐºÐ°Ð²ÑÑки, обÑамлÑÑÑие оÑделÑнÑе иденÑиÑикаÑоÑÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð»Ð¸Ñние ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿Ð¾Ñле поÑледнего иденÑиÑикаÑоÑа вÑзÑваÑÑ Ð¾ÑибкÑ, но еÑли оÑклÑÑиÑÑ ÑÑÑогий Ñежим (пеÑедаÑÑ Ð²Ð¾ вÑоÑом паÑамеÑÑе false), Ñакие ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¸Ð³Ð½Ð¾ÑиÑÑÑÑÑÑ. (ÐÑо поведение полезно Ð´Ð»Ñ ÑазбоÑа имÑн ÑакиÑ
обÑекÑов, как ÑÑнкÑии.) ÐамеÑÑÑе, ÑÑо ÑÑа ÑÑнкÑÐ¸Ñ Ð½Ðµ ÑÑÐµÐºÐ°ÐµÑ ÑÑезмеÑно длиннÑе иденÑиÑикаÑоÑÑ. ÐÑли Ð²Ñ Ñ
оÑиÑе полÑÑиÑÑ ÑÑеÑÑннÑе имена, можно пÑивеÑÑи ÑезÑлÑÑÐ°Ñ Ðº name[]. | parse_ident('"SomeSchema".someTable') | {SomeSchema,sometable} |
| name | ÐозвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ ÑекÑÑей клиенÑÑкой кодиÑовки | pg_client_encoding() | SQL_ASCII |
| text | ÐеÑÐµÐ´Ð°Ð½Ð½Ð°Ñ ÑÑÑока оÑоÑмлÑеÑÑÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² каÑеÑÑве иденÑиÑикаÑоÑа в SQL -опеÑаÑоÑе. ÐÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи иденÑиÑикаÑÐ¾Ñ Ð·Ð°ÐºÐ»ÑÑаеÑÑÑ Ð² кавÑÑки (напÑимеÑ, еÑли он ÑодеÑÐ¶Ð¸Ñ ÑимволÑ, недопÑÑÑимÑе в оÑкÑÑÑом виде, или бÑÐºÐ²Ñ Ð² Ñазном ÑегиÑÑÑе). ÐÑли пеÑÐµÐ´Ð°Ð½Ð½Ð°Ñ ÑÑÑока ÑодеÑÐ¶Ð¸Ñ ÐºÐ°Ð²ÑÑки, они дÑблиÑÑÑÑÑÑ. См. Ñакже ÐÑимеÑ 42.1. | quote_ident('Foo bar') | "Foo bar" |
| text | ÐеÑÐµÐ´Ð°Ð½Ð½Ð°Ñ ÑÑÑока оÑоÑмлÑеÑÑÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² каÑеÑÑве ÑекÑÑовой ÑÑÑоки в SQL-опеÑаÑоÑе. ÐклÑÑÑннÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð°Ð¿Ð¾ÑÑÑÐ¾Ñ Ð¸ обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа пÑи ÑÑом дÑблиÑÑÑÑÑÑ. ÐамеÑÑÑе, ÑÑо quote_literal возвÑаÑÐ°ÐµÑ NULL, когда на вÑ
од ей пеÑедаÑÑÑÑ ÑÑÑока NULL; еÑли же нÑжно полÑÑиÑÑ Ð¿ÑедÑÑавление и Ñакого аÑгÑменÑа, лÑÑÑе иÑполÑзоваÑÑ quote_nullable. См. Ñакже ÐÑимеÑ 42.1. | quote_literal(E'O\'Reilly') | 'O''Reilly' |
| text | ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ðµ знаÑение в ÑекÑÑовÑй вид и заклÑÑÐ°ÐµÑ Ð² апоÑÑÑоÑÑ ÐºÐ°Ðº ÑекÑÑовÑÑ ÑÑÑокÑ. Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Ð°Ð¿Ð¾ÑÑÑÐ¾Ñ Ð¸ обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа пÑи ÑÑом дÑблиÑÑÑÑÑÑ. | quote_literal(42.5) | '42.5' |
| text | ÐеÑÐµÐ´Ð°Ð½Ð½Ð°Ñ ÑÑÑока оÑоÑмлÑеÑÑÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² каÑеÑÑве ÑекÑÑовой ÑÑÑоки в SQL-опеÑаÑоÑе; пÑи ÑÑом Ð´Ð»Ñ Ð°ÑгÑменÑа NULL возвÑаÑаеÑÑÑ ÑÑÑока NULL. Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Ð°Ð¿Ð¾ÑÑÑÐ¾Ñ Ð¸ обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа дÑблиÑÑÑÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñм обÑазом. См. Ñакже ÐÑимеÑ 42.1. | quote_nullable(NULL) | NULL |
| text | ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ðµ знаÑение в ÑекÑÑовÑй вид и заклÑÑÐ°ÐµÑ Ð² апоÑÑÑоÑÑ ÐºÐ°Ðº ÑекÑÑовÑÑ ÑÑÑокÑ, пÑи ÑÑом Ð´Ð»Ñ Ð°ÑгÑменÑа NULL возвÑаÑаеÑÑÑ ÑÑÑока NULL. Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Ð°Ð¿Ð¾ÑÑÑÐ¾Ñ Ð¸ обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа дÑблиÑÑÑÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñм обÑазом. | quote_nullable(42.5) | '42.5' |
| text[] | ÐозвÑаÑÐ°ÐµÑ Ð¿Ð¾Ð´Ñ
одÑÑие подÑÑÑоки, полÑÑеннÑе из пеÑвого вÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ POSIX в ÑÑÑоке string. ÐодÑобноÑÑи опиÑÐ°Ð½Ñ Ð² ÐодÑазделе 9.7.3. | regexp_match('foobarâbequebaz', '(bar)(beque)') | {bar,beque} |
| setof text[] | ÐозвÑаÑÐ°ÐµÑ Ð¿Ð¾Ð´Ñ
одÑÑие подÑÑÑоки, полÑÑеннÑе в ÑезÑлÑÑаÑе пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ POSIX к string. ÐодÑобноÑÑи опиÑÐ°Ð½Ñ Ð² ÐодÑазделе 9.7.3. | regexp_matches('foobarâbequebaz', 'ba.', 'g') | {bar}
|
| text | ÐаменÑÐµÑ Ð¿Ð¾Ð´ÑÑÑоки, ÑооÑвеÑÑÑвÑÑÑие Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÑиле POSIX. ÐодÑобноÑÑи опиÑÐ°Ð½Ñ Ð² ÐодÑазделе 9.7.3. | regexp_replace('Thomas', '.[mN]a.', 'M') | ThM |
| text[] | РазделÑÐµÑ ÑодеÑжимое string на ÑлеменÑÑ, иÑполÑзÑÑ Ð² каÑеÑÑве ÑазделиÑÐµÐ»Ñ ÑегÑлÑÑное вÑÑажение POSIX. ÐодÑобноÑÑи опиÑÐ°Ð½Ñ Ð² ÐодÑазделе 9.7.3. | regexp_split_to_array('hello world', '\s+') | {hello,world} |
| setof text | РазделÑÐµÑ ÑодеÑжимое string на ÑлеменÑÑ, иÑполÑзÑÑ Ð² каÑеÑÑве ÑазделиÑÐµÐ»Ñ ÑегÑлÑÑное вÑÑажение POSIX. ÐодÑобноÑÑи опиÑÐ°Ð½Ñ Ð² ÐодÑазделе 9.7.3. | regexp_split_to_table('hello world', '\s+') | hello
|
| text | ÐовÑоÑÑÐµÑ ÑодеÑжимое string Ñказанное ÑиÑло (number) Ñаз | repeat('Pg', 4) | PgPgPgPg |
| text | ÐаменÑÐµÑ Ð²Ñе вÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð² string подÑÑÑоки from подÑÑÑокой to | replace('abcdefabcdef', 'cd', 'XX') | abXXefabXXef |
| text | ÐозвÑаÑÐ°ÐµÑ Ð¿ÐµÑевÑÑнÑÑÑÑ ÑÑÑÐ¾ÐºÑ | reverse('abcde') | edcba |
| text | ÐозвÑаÑÐ°ÐµÑ Ð¿Ð¾Ñледние n Ñимволов в ÑÑÑоке. Ðогда n менÑÑе нÑлÑ, возвÑаÑаÑÑÑÑ Ð²Ñе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑпÑава, кÑоме пеÑвÑÑ
|n|. | right('abcde', 2) | de |
| text | ÐополнÑÐµÑ ÑÑÑÐ¾ÐºÑ string ÑпÑава до Ð´Ð»Ð¸Ð½Ñ length Ñимволами fill (по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ñобелами). ÐÑли длина ÑÑÑоки Ñже болÑÑе заданной, она обÑезаеÑÑÑ. | rpad('hi', 5, 'xy') | hixyx |
| text | УдалÑÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑолÑко ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ characters (по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑобелÑ), Ñ ÐºÐ¾Ð½Ñа ÑÑÑоки string | rtrim('testxxzx', 'xyz') | test |
| text | РазделÑÐµÑ ÑÑÑÐ¾ÐºÑ string по ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ delimiter и возвÑаÑÐ°ÐµÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿Ð¾ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð½Ð¾Ð¼ÐµÑÑ (ÑÑиÑÐ°Ñ Ñ 1) | split_part('abc~@~defâ~@~ghi', '~@~', 2) | def |
| int | ÐозвÑаÑÐ°ÐµÑ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ Ñказанной подÑÑÑоки (подобно position(, но Ñ Ð´ÑÑгим поÑÑдком аÑгÑменÑов) | strpos('high', 'ig') | 2 |
| text | ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ (подобно substring() | substr('alphabet', 3, 2) | ph |
| bool | ÐозвÑаÑÐ°ÐµÑ true, еÑли ÑÑÑока string наÑинаеÑÑÑ Ñ Ð¿Ð¾Ð´ÑÑÑоки prefix. | starts_with('alphabet', 'alph') | t |
| text | ÐÑеобÑазÑÐµÑ string в ASCII из кодиÑовки encoding (поддеÑживаÑÑÑÑ ÑолÑко LATIN1, LATIN2, LATIN9 и WIN1250) | to_ascii('Karel') | Karel |
| text | ÐÑеобÑазÑÐµÑ ÑиÑло number в 16-ÑиÑнÑй вид | to_hex(2147483647) | 7fffffff |
| text | ÐаменÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² string, найденнÑе в набоÑе from, на ÑооÑвеÑÑÑвÑÑÑие ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² множеÑÑве to. ÐÑли ÑÑÑока from длиннее to, найденнÑе в иÑÑ
одной ÑÑÑоке лиÑние ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ from ÑдалÑÑÑÑÑ. | translate('12345', '143', 'ax') | a2x5 |
ФÑнкÑии concat, concat_ws и format пÑинимаÑÑ Ð¿ÐµÑеменное ÑиÑло аÑгÑменÑов, Ñак ÑÑо им Ð´Ð»Ñ Ð¾Ð±ÑÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пеÑедаваÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² виде маÑÑива, помеÑенного клÑÑевÑм Ñловом VARIADIC (Ñм. ÐодÑаздел 37.5.5). ÐлеменÑÑ Ñакого маÑÑива обÑабаÑÑваÑÑÑÑ, как еÑли Ð±Ñ Ð¾Ð½Ð¸ бÑли обÑÑнÑми аÑгÑменÑами ÑÑнкÑии. ÐÑли вмеÑÑо маÑÑива в ÑооÑвеÑÑÑвÑÑÑем аÑгÑменÑе пеÑедаÑÑÑÑ NULL, ÑÑнкÑии concat и concat_ws возвÑаÑаÑÑ NULL, а format воÑпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ NULL как маÑÑив нÑлевого ÑазмеÑа.
См. Ñакже агÑегаÑнÑÑ ÑÑнкÑÐ¸Ñ string_agg в Разделе 9.20.
ТаблиÑа 9.11. ÐÑÑÑоеннÑе пÑеобÑазованиÑ
| ÐÐ¼Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ [a] | ÐÑÑ Ð¾Ð´Ð½Ð°Ñ ÐºÐ¾Ð´Ð¸Ñовка | Ð¦ÐµÐ»ÐµÐ²Ð°Ñ ÐºÐ¾Ð´Ð¸Ñовка |
|---|---|---|
ascii_to_mic | SQL_ASCII | MULE_INTERNAL |
ascii_to_utf8 | SQL_ASCII | UTF8 |
big5_to_euc_tw | BIG5 | EUC_TW |
big5_to_mic | BIG5 | MULE_INTERNAL |
big5_to_utf8 | BIG5 | UTF8 |
euc_cn_to_mic | EUC_CN | MULE_INTERNAL |
euc_cn_to_utf8 | EUC_CN | UTF8 |
euc_jp_to_mic | EUC_JP | MULE_INTERNAL |
euc_jp_to_sjis | EUC_JP | SJIS |
euc_jp_to_utf8 | EUC_JP | UTF8 |
euc_kr_to_mic | EUC_KR | MULE_INTERNAL |
euc_kr_to_utf8 | EUC_KR | UTF8 |
euc_tw_to_big5 | EUC_TW | BIG5 |
euc_tw_to_mic | EUC_TW | MULE_INTERNAL |
euc_tw_to_utf8 | EUC_TW | UTF8 |
gb18030_to_utf8 | GB18030 | UTF8 |
gbk_to_utf8 | GBK | UTF8 |
iso_8859_10_to_utf8 | LATIN6 | UTF8 |
iso_8859_13_to_utf8 | LATIN7 | UTF8 |
iso_8859_14_to_utf8 | LATIN8 | UTF8 |
iso_8859_15_to_utf8 | LATIN9 | UTF8 |
iso_8859_16_to_utf8 | LATIN10 | UTF8 |
iso_8859_1_to_mic | LATIN1 | MULE_INTERNAL |
iso_8859_1_to_utf8 | LATIN1 | UTF8 |
iso_8859_2_to_mic | LATIN2 | MULE_INTERNAL |
iso_8859_2_to_utf8 | LATIN2 | UTF8 |
iso_8859_2_to_windows_1250 | LATIN2 | WIN1250 |
iso_8859_3_to_mic | LATIN3 | MULE_INTERNAL |
iso_8859_3_to_utf8 | LATIN3 | UTF8 |
iso_8859_4_to_mic | LATIN4 | MULE_INTERNAL |
iso_8859_4_to_utf8 | LATIN4 | UTF8 |
iso_8859_5_to_koi8_r | ISO_8859_5 | KOI8R |
iso_8859_5_to_mic | ISO_8859_5 | MULE_INTERNAL |
iso_8859_5_to_utf8 | ISO_8859_5 | UTF8 |
iso_8859_5_to_windows_1251 | ISO_8859_5 | WIN1251 |
iso_8859_5_to_windows_866 | ISO_8859_5 | WIN866 |
iso_8859_6_to_utf8 | ISO_8859_6 | UTF8 |
iso_8859_7_to_utf8 | ISO_8859_7 | UTF8 |
iso_8859_8_to_utf8 | ISO_8859_8 | UTF8 |
iso_8859_9_to_utf8 | LATIN5 | UTF8 |
johab_to_utf8 | JOHAB | UTF8 |
koi8_r_to_iso_8859_5 | KOI8R | ISO_8859_5 |
koi8_r_to_mic | KOI8R | MULE_INTERNAL |
koi8_r_to_utf8 | KOI8R | UTF8 |
koi8_r_to_windows_1251 | KOI8R | WIN1251 |
koi8_r_to_windows_866 | KOI8R | WIN866 |
koi8_u_to_utf8 | KOI8U | UTF8 |
mic_to_ascii | MULE_INTERNAL | SQL_ASCII |
mic_to_big5 | MULE_INTERNAL | BIG5 |
mic_to_euc_cn | MULE_INTERNAL | EUC_CN |
mic_to_euc_jp | MULE_INTERNAL | EUC_JP |
mic_to_euc_kr | MULE_INTERNAL | EUC_KR |
mic_to_euc_tw | MULE_INTERNAL | EUC_TW |
mic_to_iso_8859_1 | MULE_INTERNAL | LATIN1 |
mic_to_iso_8859_2 | MULE_INTERNAL | LATIN2 |
mic_to_iso_8859_3 | MULE_INTERNAL | LATIN3 |
mic_to_iso_8859_4 | MULE_INTERNAL | LATIN4 |
mic_to_iso_8859_5 | MULE_INTERNAL | ISO_8859_5 |
mic_to_koi8_r | MULE_INTERNAL | KOI8R |
mic_to_sjis | MULE_INTERNAL | SJIS |
mic_to_windows_1250 | MULE_INTERNAL | WIN1250 |
mic_to_windows_1251 | MULE_INTERNAL | WIN1251 |
mic_to_windows_866 | MULE_INTERNAL | WIN866 |
sjis_to_euc_jp | SJIS | EUC_JP |
sjis_to_mic | SJIS | MULE_INTERNAL |
sjis_to_utf8 | SJIS | UTF8 |
windows_1258_to_utf8 | WIN1258 | UTF8 |
uhc_to_utf8 | UHC | UTF8 |
utf8_to_ascii | UTF8 | SQL_ASCII |
utf8_to_big5 | UTF8 | BIG5 |
utf8_to_euc_cn | UTF8 | EUC_CN |
utf8_to_euc_jp | UTF8 | EUC_JP |
utf8_to_euc_kr | UTF8 | EUC_KR |
utf8_to_euc_tw | UTF8 | EUC_TW |
utf8_to_gb18030 | UTF8 | GB18030 |
utf8_to_gbk | UTF8 | GBK |
utf8_to_iso_8859_1 | UTF8 | LATIN1 |
utf8_to_iso_8859_10 | UTF8 | LATIN6 |
utf8_to_iso_8859_13 | UTF8 | LATIN7 |
utf8_to_iso_8859_14 | UTF8 | LATIN8 |
utf8_to_iso_8859_15 | UTF8 | LATIN9 |
utf8_to_iso_8859_16 | UTF8 | LATIN10 |
utf8_to_iso_8859_2 | UTF8 | LATIN2 |
utf8_to_iso_8859_3 | UTF8 | LATIN3 |
utf8_to_iso_8859_4 | UTF8 | LATIN4 |
utf8_to_iso_8859_5 | UTF8 | ISO_8859_5 |
utf8_to_iso_8859_6 | UTF8 | ISO_8859_6 |
utf8_to_iso_8859_7 | UTF8 | ISO_8859_7 |
utf8_to_iso_8859_8 | UTF8 | ISO_8859_8 |
utf8_to_iso_8859_9 | UTF8 | LATIN5 |
utf8_to_johab | UTF8 | JOHAB |
utf8_to_koi8_r | UTF8 | KOI8R |
utf8_to_koi8_u | UTF8 | KOI8U |
utf8_to_sjis | UTF8 | SJIS |
utf8_to_windows_1258 | UTF8 | WIN1258 |
utf8_to_uhc | UTF8 | UHC |
utf8_to_windows_1250 | UTF8 | WIN1250 |
utf8_to_windows_1251 | UTF8 | WIN1251 |
utf8_to_windows_1252 | UTF8 | WIN1252 |
utf8_to_windows_1253 | UTF8 | WIN1253 |
utf8_to_windows_1254 | UTF8 | WIN1254 |
utf8_to_windows_1255 | UTF8 | WIN1255 |
utf8_to_windows_1256 | UTF8 | WIN1256 |
utf8_to_windows_1257 | UTF8 | WIN1257 |
utf8_to_windows_866 | UTF8 | WIN866 |
utf8_to_windows_874 | UTF8 | WIN874 |
windows_1250_to_iso_8859_2 | WIN1250 | LATIN2 |
windows_1250_to_mic | WIN1250 | MULE_INTERNAL |
windows_1250_to_utf8 | WIN1250 | UTF8 |
windows_1251_to_iso_8859_5 | WIN1251 | ISO_8859_5 |
windows_1251_to_koi8_r | WIN1251 | KOI8R |
windows_1251_to_mic | WIN1251 | MULE_INTERNAL |
windows_1251_to_utf8 | WIN1251 | UTF8 |
windows_1251_to_windows_866 | WIN1251 | WIN866 |
windows_1252_to_utf8 | WIN1252 | UTF8 |
windows_1256_to_utf8 | WIN1256 | UTF8 |
windows_866_to_iso_8859_5 | WIN866 | ISO_8859_5 |
windows_866_to_koi8_r | WIN866 | KOI8R |
windows_866_to_mic | WIN866 | MULE_INTERNAL |
windows_866_to_utf8 | WIN866 | UTF8 |
windows_866_to_windows_1251 | WIN866 | WIN |
windows_874_to_utf8 | WIN874 | UTF8 |
euc_jis_2004_to_utf8 | EUC_JIS_2004 | UTF8 |
utf8_to_euc_jis_2004 | UTF8 | EUC_JIS_2004 |
shift_jis_2004_to_utf8 | SHIFT_JIS_2004 | UTF8 |
utf8_to_shift_jis_2004 | UTF8 | SHIFT_JIS_2004 |
euc_jis_2004_to_shift_jis_2004 | EUC_JIS_2004 | SHIFT_JIS_2004 |
shift_jis_2004_to_euc_jis_2004 | SHIFT_JIS_2004 | EUC_JIS_2004 |
[a] Ðмена пÑеобÑазований ÑледÑÑÑ ÑÑандаÑÑной ÑÑ
еме именованиÑ. РоÑиÑиалÑÐ½Ð¾Ð¼Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¸ÑÑ
одной кодиÑовки, в коÑоÑом вÑе не алÑавиÑно-ÑиÑÑовÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð·Ð°Ð¼ÐµÐ½ÑÑÑÑÑ Ð¿Ð¾Ð´ÑÑÑкиваниÑми, добавлÑеÑÑÑ | ||
9.4.1. format
ФÑнкÑÐ¸Ñ format вÑдаÑÑ ÑекÑÑ, оÑÑоÑмаÑиÑованнÑй в ÑооÑвеÑÑÑвии Ñо ÑÑÑокой ÑоÑмаÑа, подобно ÑÑнкÑии sprintf в C.
format(formatstrtext[,formatarg"any"[, ...] ])
formatstr â ÑÑÑока, опÑеделÑÑÑаÑ, как бÑÐ´ÐµÑ ÑоÑмаÑиÑоваÑÑÑÑ ÑезÑлÑÑаÑ. ÐбÑÑнÑй ÑекÑÑ Ð² ÑÑÑоке ÑоÑмаÑа непоÑÑедÑÑвенно копиÑÑеÑÑÑ Ð² ÑезÑлÑÑаÑ, за иÑклÑÑением ÑпеÑиÑикаÑоÑов ÑоÑмаÑа. СпеÑиÑикаÑоÑÑ ÑоÑмаÑа пÑедÑÑавлÑÑÑ Ñобой меÑÑозаполниÑели, опÑеделÑÑÑие, как Ð´Ð¾Ð»Ð¶Ð½Ñ ÑоÑмаÑиÑоваÑÑÑÑ Ð¸ вÑводиÑÑÑÑ Ð² ÑезÑлÑÑаÑе аÑгÑменÑÑ ÑÑнкÑии. ÐаждÑй аÑгÑÐ¼ÐµÐ½Ñ formatarg пÑеобÑазÑеÑÑÑ Ð² ÑекÑÑ Ð¿Ð¾ пÑавилам вÑводам Ñвоего Ñипа даннÑÑ
, а заÑем ÑоÑмаÑиÑÑеÑÑÑ Ð¸ вÑÑавлÑеÑÑÑ Ð² ÑезÑлÑÑиÑÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ ÑоглаÑно ÑпеÑиÑикаÑоÑам ÑоÑмаÑа.
СпеÑиÑикаÑоÑÑ ÑоÑмаÑа пÑедваÑÑÑÑÑÑ Ñимволом % и имеÑÑ ÑоÑмÑ
%[позиÑиÑ][Ñлаги][ÑиÑина]Ñип
ÐдеÑÑ:
позиÑиÑ(необÑзаÑелен)СÑÑока вида
, гдеn$nâ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ñводимого аÑгÑменÑа. ÐндекÑ, ÑавнÑй 1, вÑбиÑÐ°ÐµÑ Ð¿ÐµÑвÑй аÑгÑÐ¼ÐµÐ½Ñ Ð¿Ð¾Ñлеformatstr. ÐÑлипозиÑиÑопÑÑкаеÑÑÑ, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ ÑледÑÑÑий аÑгÑÐ¼ÐµÐ½Ñ Ð¿Ð¾ поÑÑдкÑ.Ñлаги(необÑзаÑелен)ÐополниÑелÑнÑе паÑамеÑÑÑ, ÑпÑавлÑÑÑие ÑоÑмаÑиÑованием данного ÑпеÑиÑикаÑоÑа. РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑолÑко знак минÑÑ (
-), коÑоÑÑй вÑÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ ÑезÑлÑÑаÑа ÑпеÑиÑикаÑоÑа по Ð»ÐµÐ²Ð¾Ð¼Ñ ÐºÑаÑ. Ðн ÑабоÑаеÑ, ÑолÑко еÑли Ñакже опÑеделенаÑиÑина.ÑиÑина(необÑзаÑелен)ÐадаÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»Ñное ÑиÑло Ñимволов, коÑоÑое бÑÐ´ÐµÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ ÑезÑлÑÑÐ°Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑпеÑиÑикаÑоÑа. ÐÑводимое знаÑение вÑÑавниваеÑÑÑ Ð¿Ð¾ пÑавой или левой ÑÑоÑоне (в завиÑимоÑÑи Ð¾Ñ Ñлага
-) Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñм ÑиÑлом пÑобелов. ÐÑли ÑиÑина ÑлиÑком мала, она пÑоÑÑо игноÑиÑÑеÑÑÑ, Ñ. е. ÑезÑлÑÑÐ°Ñ Ð½Ðµ ÑÑекаеÑÑÑ. ШиÑÐ¸Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð¾ обознаÑиÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм ÑелÑм, звÑздоÑкой (*), Ñогда ÑиÑина бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑена из ÑледÑÑÑего аÑгÑменÑа ÑÑнкÑии, или ÑÑÑокой вида*, Ñогда ÑиÑина бÑÐ´ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð²n$n-ом аÑгÑменÑе ÑÑнкÑии.ÐÑли ÑиÑина пеÑедаÑÑÑÑ Ð² аÑгÑменÑе ÑÑнкÑии, ÑÑÐ¾Ñ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ð²ÑбиÑаеÑÑÑ Ð´Ð¾ аÑгÑменÑа, иÑполÑзÑемого Ð´Ð»Ñ ÑпеÑиÑикаÑоÑа. ÐÑли аÑгÑÐ¼ÐµÐ½Ñ ÑиÑÐ¸Ð½Ñ Ð¾ÑÑиÑаÑелÑнÑй, ÑезÑлÑÑÐ°Ñ Ð²ÑÑавниваеÑÑÑ Ð¿Ð¾ левой ÑÑоÑоне (как еÑли Ð±Ñ Ð±Ñл Ñказан Ñлаг
-) в ÑÐ°Ð¼ÐºÐ°Ñ Ð¿Ð¾Ð»Ñ Ð´Ð»Ð¸Ð½Ñabs(ÑиÑина).Ñип(обÑзаÑелен)Тип ÑпеÑиÑикаÑоÑа опÑеделÑÐµÑ Ð¿ÑеобÑазование ÑооÑвеÑÑÑвÑÑÑего вÑводимого знаÑениÑ. ÐоддеÑживаÑÑÑÑ ÑледÑÑÑие ÑипÑ:
sÑоÑмаÑиÑÑÐµÑ Ð·Ð½Ð°Ñение аÑгÑменÑа как пÑоÑÑÑÑ ÑÑÑокÑ. ÐнаÑение NULL пÑедÑÑавлÑеÑÑÑ Ð¿ÑÑÑой ÑÑÑокой.IобÑабаÑÑÐ²Ð°ÐµÑ Ð·Ð½Ð°Ñение аÑгÑменÑа как SQL-иденÑиÑикаÑоÑ, пÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи заклÑÑÐ°Ñ ÐµÐ³Ð¾ в кавÑÑки. ÐнаÑение NULL Ð´Ð»Ñ Ñакого пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑиÑаеÑÑÑ Ð¾ÑибоÑнÑм (Ñак же, как и длÑquote_ident).LзаклÑÑÐ°ÐµÑ Ð·Ð½Ð°Ñение аÑгÑменÑа в апоÑÑÑоÑÑ, как ÑÑÑÐ¾ÐºÑ SQL. ÐнаÑение NULL вÑводиÑÑÑ Ð±ÑквалÑно, какNULL, без кавÑÑек (Ñак же, как и Ñquote_nullable).
Рдополнение к ÑпеÑиÑикаÑоÑам, опиÑаннÑм вÑÑе, можно иÑполÑзоваÑÑ ÑпеÑпоÑледоваÑелÑноÑÑÑ %%, коÑоÑÐ°Ñ Ð¿ÑоÑÑо вÑÐ²ÐµÐ´ÐµÑ Ñимвол %.
ÐеÑколÑко пÑимеÑов пÑоÑÑÑÑ Ð¿ÑеобÑазований ÑоÑмаÑа:
SELECT format('Hello %s', 'World');
РезÑлÑÑаÑ: Hello World
SELECT format('Testing %s, %s, %s, %%', 'one', 'two', 'three');
РезÑлÑÑаÑ: Testing one, two, three, %
SELECT format('INSERT INTO %I VALUES(%L)', 'Foo bar', E'O\'Reilly');
РезÑлÑÑаÑ: INSERT INTO "Foo bar" VALUES('O''Reilly')
SELECT format('INSERT INTO %I VALUES(%L)', 'locations', 'C:\Program Files');
РезÑлÑÑаÑ: INSERT INTO locations VALUES('C:\Program Files')
СледÑÑÑие пÑимеÑÑ Ð¸Ð»Ð»ÑÑÑÑиÑÑÑÑ Ð¸ÑполÑзование Ð¿Ð¾Ð»Ñ ÑиÑина и Ñлага -:
SELECT format('|%10s|', 'foo');
РезÑлÑÑаÑ: | foo|
SELECT format('|%-10s|', 'foo');
РезÑлÑÑаÑ: |foo |
SELECT format('|%*s|', 10, 'foo');
РезÑлÑÑаÑ: | foo|
SELECT format('|%*s|', -10, 'foo');
РезÑлÑÑаÑ: |foo |
SELECT format('|%-*s|', 10, 'foo');
РезÑлÑÑаÑ: |foo |
SELECT format('|%-*s|', -10, 'foo');
РезÑлÑÑаÑ: |foo |
ÐÑи пÑимеÑÑ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ Ð¿Ñименение полей позиÑиÑ:
SELECT format('Testing %3$s, %2$s, %1$s', 'one', 'two', 'three');
РезÑлÑÑаÑ: Testing three, two, one
SELECT format('|%*2$s|', 'foo', 10, 'bar');
РезÑлÑÑаÑ: | bar|
SELECT format('|%1$*2$s|', 'foo', 10, 'bar');
РезÑлÑÑаÑ: | foo|
РоÑлиÑие Ð¾Ñ ÑÑандаÑÑной ÑÑнкÑии C sprintf, ÑÑнкÑÐ¸Ñ format в PostgreSQL позволÑÐµÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð¸ÑоваÑÑ Ð² одной ÑÑÑоке ÑпеÑиÑикаÑоÑÑ Ñ Ð¿Ð¾Ð»Ñми позиÑÐ¸Ñ Ð¸ без ниÑ
. СпеÑиÑикаÑÐ¾Ñ ÑоÑмаÑа без Ð¿Ð¾Ð»Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð²Ñегда иÑполÑзÑÐµÑ ÑледÑÑÑий аÑгÑÐ¼ÐµÐ½Ñ Ð¿Ð¾Ñле поÑледнего вÑбÑанного. ÐÑоме Ñого, ÑÑнкÑÐ¸Ñ format не ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð² ÑÑÑоке ÑоÑмаÑа иÑполÑзовалиÑÑ Ð²Ñе аÑгÑменÑÑ ÑÑнкÑии. ÐÑÐ¸Ð¼ÐµÑ ÑÑого поведениÑ:
SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
РезÑлÑÑаÑ: Testing three, two, three
СпеÑиÑикаÑоÑÑ ÑоÑмаÑа %I и %L оÑобенно Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð´Ð»Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñного ÑоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑкиÑ
опеÑаÑоÑов SQL. См. ÐÑимеÑ 42.1.