9.5. ФÑнкÑии и опеÑаÑоÑÑ Ð´Ð²Ð¾Ð¸ÑнÑÑ
ÑÑÑок
Ð ÑÑом Ñазделе опиÑÑваÑÑÑÑ ÑÑнкÑии и опеÑаÑоÑÑ Ð´Ð»Ñ ÑабоÑÑ Ñ Ð´Ð°Ð½Ð½Ñми Ñипа bytea.
Ð SQL опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð½ÐµÑколÑко ÑÑÑоковÑÑ
ÑÑнкÑий, в коÑоÑÑÑ
аÑгÑменÑÑ ÑазделÑÑÑÑÑ Ð½Ðµ запÑÑÑми, а клÑÑевÑми Ñловами. ÐодÑобнее ÑÑо опиÑано в ТаблиÑе 9.11. PostgreSQL Ñакже пÑедоÑÑавлÑÐµÑ Ð²Ð°ÑианÑÑ ÑÑиÑ
ÑÑнкÑий Ñ ÑинÑакÑиÑом, обÑÑнÑм Ð´Ð»Ñ ÑÑнкÑий (Ñм. ТаблиÑÑ 9.12).
ÐÑимеÑание
РпÑимеÑаÑ
, пÑиведÑннÑÑ
на ÑÑой ÑÑÑаниÑе, подÑазÑмеваеÑÑÑ, ÑÑо паÑамеÑÑ ÑеÑвеÑа bytea_output Ñавен escape (вÑбÑан ÑÑадиÑионнÑй ÑоÑÐ¼Ð°Ñ PostgreSQL).
ТаблиÑа 9.11. SQL-ÑÑнкÑии и опеÑаÑоÑÑ Ð´Ð»Ñ ÑабоÑÑ Ñ Ð´Ð²Ð¾Ð¸ÑнÑми ÑÑÑоками
| ФÑнкÑÐ¸Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ | РезÑлÑÑÐ°Ñ |
|---|
string || string | bytea | ÐонкаÑенаÑÐ¸Ñ ÑÑÑок | '\\Post'::bytea || '\047gres\000'::bytea | \\Post'gresâ\000 |
octet_length(string) | int | ЧиÑло Ð±Ð°Ð¹Ñ Ð² двоиÑной ÑÑÑоке | octet_length('jo\000se'::bytea) | 5 |
overlay(string placing string from int [for int]) | bytea | ÐаменÑÐµÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ | overlay('Th\000omas'::bytea placing '\002\003'::bytea from 2 for 3) | T\\002â\\003âmas |
position(substring in string) | int | Ðоложение Ñказанной подÑÑÑоки | position('\000om'::bytea in 'Th\000omas'::bytea) | 3 |
substring(string [from int] [for int]) | bytea | ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ | substring('Th\000omas'::bytea from 2 for 3) | h\000o |
trim([both] bytes from string) | bytea | УдалÑÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑолÑко байÑÑ, заданнÑе в паÑамеÑÑе bytes, Ñ Ð½Ð°Ñала и Ñ ÐºÐ¾Ð½Ñа ÑÑÑоки string | trim('\000\001'::bytea from '\000Tom\001'::bytea) | Tom |
Ð PostgreSQL еÑÑÑ Ð¸ дÑÑгие ÑÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ Ð´Ð²Ð¾Ð¸ÑнÑми ÑÑÑоками, пеÑеÑиÑленнÑе в ТаблиÑе 9.12. ÐекоÑоÑÑе из ниÑ
иÑполÑзÑÑÑÑÑ Ð² каÑеÑÑве внÑÑÑенней ÑеализаÑии ÑÑандаÑÑнÑÑ
ÑÑнкÑий SQL, пÑиведÑннÑÑ
в ТаблиÑе 9.11.
ТаблиÑа 9.12. ÐÑÑгие ÑÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ Ð´Ð²Ð¾Ð¸ÑнÑми ÑÑÑоками
| ФÑнкÑÐ¸Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ | РезÑлÑÑÐ°Ñ |
|---|
btrim(string bytea, bytes bytea) | bytea | УдалÑÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑолÑко байÑÑ, заданнÑе в паÑамеÑÑе bytes, Ñ Ð½Ð°Ñала и Ñ ÐºÐ¾Ð½Ñа ÑÑÑоки string | btrim('\000trim\001'::bytea, '\000\001'::bytea) | trim |
decode(string text, format text) | bytea | ÐолÑÑÐ°ÐµÑ Ð´Ð²Ð¾Ð¸ÑнÑе даннÑе из ÑекÑÑового пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² string. ÐнаÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑа format Ñе же, ÑÑо и Ð´Ð»Ñ ÑÑнкÑии encode. | decode('123\000456', 'escape') | 123\000456 |
encode(data bytea, format text) | text | ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð´Ð²Ð¾Ð¸ÑнÑе даннÑе в ÑекÑÑовое пÑедÑÑавление в одном из ÑоÑмаÑов: base64, hex, escape. ФоÑÐ¼Ð°Ñ escape пÑеобÑазÑÐµÑ Ð½ÑлевÑе байÑÑ Ð¸ байÑÑ Ñ 1 в ÑÑаÑÑем биÑе в воÑÑмеÑиÑнÑе поÑледоваÑелÑноÑÑи \nnn и дÑблиÑÑÐµÑ Ð¾Ð±ÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ. | encode('123\000456'::bytea, 'escape') | 123\000456 |
get_bit(string, offset) | int | ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð±Ð¸Ñ Ð¸Ð· ÑÑÑоки | get_bit('Th\000omas'::bytea, 45) | 1 |
get_byte(string, offset) | int | ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð±Ð°Ð¹Ñ Ð¸Ð· ÑÑÑоки | get_byte('Th\000omas'::bytea, 4) | 109 |
length(string) | int | Ðлина двоиÑной ÑÑÑоки | length('jo\000se'::bytea) | 5 |
md5(string) | text | ÐÑÑиÑлÑÐµÑ MD5-Ñ
ÐµÑ ÑÑÑоки string и возвÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ Ð² 16-ÑиÑном виде | md5('Th\000omas'::bytea) | 8ab2d3c9689aaf18âb4958c334c82d8b1 |
set_bit(string, offset, newvalue) | bytea | УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение биÑа в ÑÑÑоке | set_bit('Th\000omas'::bytea, 45, 0) | Th\000omAs |
set_byte(string, offset, newvalue) | bytea | УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение байÑа в ÑÑÑоке | set_byte('Th\000omas'::bytea, 4, 64) | Th\000o@as |
sha224(bytea) | bytea | Ð¥ÐµÑ SHA-224 | sha224('abc') | \x23097d223405d8228642a477bda2â55b32aadbce4bda0b3fâ7e36c9da7 |
sha256(bytea) | bytea | Ð¥ÐµÑ SHA-256 | sha256('abc') | \xba7816bf8f01cfea414140de5dae2223âb00361a396177a9âcb410ff61f20015ad |
sha384(bytea) | bytea | Ð¥ÐµÑ SHA-384 | sha384('abc') | \xcb00753f45a35e8bb5a03d699ac65007â272c32ab0eded16â31a8b605a43ff5bedâ8086072ba1e7cc2358baeca134c825a7 |
sha512(bytea) | bytea | Ð¥ÐµÑ SHA-512 | sha512('abc') | \xddaf35a193617abacc417349ae204131â12e6fa4e89a97eaâ20a9eeee64b55d39aâ2192992a274fc1a836ba3c23a3feebbdââ454d4423643ce80e2a9ac94fa54ca49f |
ÐÐ»Ñ ÑÑнкÑий get_byte и set_byte байÑÑ Ð½ÑмеÑÑеÑÑÑ Ñ 0. ФÑнкÑии get_bit и set_bit нÑмеÑÑÑÑ Ð±Ð¸ÑÑ ÑпÑава налево; напÑимеÑ, Ð±Ð¸Ñ 0 бÑÐ´ÐµÑ Ð¼ÐµÐ½ÑÑим знаÑаÑим биÑом пеÑвого байÑа, а Ð±Ð¸Ñ 15 â болÑÑим знаÑаÑим биÑом вÑоÑого байÑа.
ÐамеÑÑÑе, ÑÑо по иÑÑоÑиÑеÑким пÑиÑинам ÑÑнкÑÐ¸Ñ md5 возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение в ÑеÑÑнадÑаÑеÑиÑном виде в Ñипе text, Ñогда как ÑÑнкÑии SHA-2 возвÑаÑаÑÑ Ñип bytea. ÐÑполÑзÑйÑе ÑÑнкÑии encode и decode Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°Ñений из одного пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² дÑÑгое. ÐапÑимеÑ, вÑзвав encode(sha256('abc'), 'hex'), Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе знаÑение в ÑеÑÑнадÑаÑеÑиÑном виде в ÑÑÑоке.
См. Ñакже агÑегаÑнÑÑ ÑÑнкÑÐ¸Ñ string_agg в Разделе 9.20 и ÑÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ Ð±Ð¾Ð»ÑÑими обÑекÑами в Разделе 35.4.