9.5. ФÑнкÑии и опеÑаÑоÑÑ Ð´Ð²Ð¾Ð¸ÑнÑÑ ÑÑÑок
Ð ÑÑом Ñазделе опиÑÑваÑÑÑÑ ÑÑнкÑии и опеÑаÑоÑÑ Ð´Ð»Ñ ÑабоÑÑ Ñ Ð´Ð²Ð¾Ð¸ÑнÑми ÑÑÑоками, Ñо еÑÑÑ Ñо знаÑениÑми Ñипа bytea. Ðногие из ниÑ
иденÑиÑÐ½Ñ Ð¿Ð¾ ÑÑнкÑионалÑноÑÑи и ÑинÑакÑиÑÑ Ð¾Ð¿Ð¸ÑаннÑм в пÑедÑдÑÑем Ñазделе ÑÑнкÑиÑм, пÑедназнаÑеннÑм Ð´Ð»Ñ ÑекÑÑовÑÑ
ÑÑÑок.
Ð SQL опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð½ÐµÑколÑко ÑÑÑоковÑÑ ÑÑнкÑий, в коÑоÑÑÑ Ð°ÑгÑменÑÑ ÑазделÑÑÑÑÑ Ð½Ðµ запÑÑÑми, а клÑÑевÑми Ñловами. ÐодÑобнее ÑÑо опиÑано в ТаблиÑе 9.11. PostgreSQL Ñакже пÑедоÑÑавлÑÐµÑ Ð²Ð°ÑианÑÑ ÑÑÐ¸Ñ ÑÑнкÑий Ñ ÑинÑакÑиÑом, обÑÑнÑм Ð´Ð»Ñ ÑÑнкÑий (Ñм. ТаблиÑÑ 9.12).
ТаблиÑа 9.11. SQL-ÑÑнкÑии и опеÑаÑоÑÑ Ð´Ð»Ñ ÑабоÑÑ Ñ Ð´Ð²Ð¾Ð¸ÑнÑми ÑÑÑоками
Ð PostgreSQL еÑÑÑ Ð¸ дÑÑгие ÑÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ Ð´Ð²Ð¾Ð¸ÑнÑми ÑÑÑоками, пеÑеÑиÑленнÑе в ТаблиÑе 9.12. ÐекоÑоÑÑе из Ð½Ð¸Ñ Ð¸ÑполÑзÑÑÑÑÑ Ð² каÑеÑÑве внÑÑÑенней ÑеализаÑии ÑÑандаÑÑнÑÑ ÑÑнкÑий SQL, пÑиведÑннÑÑ Ð² ТаблиÑе 9.11.
ТаблиÑа 9.12. ÐÑÑгие ÑÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ Ð´Ð²Ð¾Ð¸ÑнÑми ÑÑÑоками
ФÑнкÑÐ¸Ñ ÐпиÑание ÐÑимеÑ(Ñ) |
|---|
ÐозвÑаÑÐ°ÐµÑ ÑиÑло Ð±Ð¸Ñ Ð² двоиÑной ÑÑÑоке (ÑÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ñакже назÑваÑÑ Â«popcount»).
|
УдалÑÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑолÑко байÑÑ, заданнÑе в паÑамеÑÑе
|
ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¸Ð· двоиÑной ÑÑÑоки Ð±Ð¸Ñ Ñ Ð½Ð¾Ð¼ÐµÑом n.
|
ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¸Ð· двоиÑной ÑÑÑоки Ð±Ð°Ð¹Ñ Ñ Ð½Ð¾Ð¼ÐµÑом n.
|
ÐÑдаÑÑ ÑиÑло Ð±Ð°Ð¹Ñ Ð² двоиÑной ÑÑÑоке.
|
ÐÑдаÑÑ ÑиÑло Ñимволов в двоиÑной ÑÑÑоке, в пÑедположении, ÑÑо она ÑодеÑÐ¶Ð¸Ñ ÑекÑÑ Ð² кодиÑовке
|
УдалÑÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑолÑко байÑÑ, заданнÑе в паÑамеÑÑе
|
ÐÑÑиÑлÑÐµÑ MD5-Ñ ÐµÑ Ð´Ð²Ð¾Ð¸Ñной ÑÑÑоки и вÑдаÑÑ ÑезÑлÑÑÐ°Ñ Ð² ÑеÑÑнадÑаÑеÑиÑном виде.
|
УдалÑÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑолÑко байÑÑ, заданнÑе в паÑамеÑÑе
|
УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð² двоиÑной ÑÑÑоке Ð´Ð»Ñ Ð±Ð¸Ñа Ñ Ð½Ð¾Ð¼ÐµÑом n знаÑение
|
УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð² двоиÑной ÑÑÑоке Ð´Ð»Ñ Ð±Ð°Ð¹Ñа Ñ Ð½Ð¾Ð¼ÐµÑом n знаÑение
|
ÐÑÑиÑлÑÐµÑ Ñ ÐµÑ SHA-224 Ð´Ð»Ñ Ð´Ð²Ð¾Ð¸Ñной ÑÑÑоки.
|
ÐÑÑиÑлÑÐµÑ Ñ ÐµÑ SHA-256 Ð´Ð»Ñ Ð´Ð²Ð¾Ð¸Ñной ÑÑÑоки.
|
ÐÑÑиÑлÑÐµÑ Ñ ÐµÑ SHA-384 Ð´Ð»Ñ Ð´Ð²Ð¾Ð¸Ñной ÑÑÑоки.
|
ÐÑÑиÑлÑÐµÑ Ñ ÐµÑ SHA-512 Ð´Ð»Ñ Ð´Ð²Ð¾Ð¸Ñной ÑÑÑоки.
|
ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¸Ð·
|
ÐÐ»Ñ ÑÑнкÑий get_byte и set_byte байÑÑ Ð½ÑмеÑÑеÑÑÑ Ñ 0. ФÑнкÑии get_bit и set_bit нÑмеÑÑÑÑ Ð±Ð¸ÑÑ ÑпÑава налево; напÑимеÑ, Ð±Ð¸Ñ 0 бÑÐ´ÐµÑ Ð¼ÐµÐ½ÑÑим знаÑаÑим биÑом пеÑвого байÑа, а Ð±Ð¸Ñ 15 â болÑÑим знаÑаÑим биÑом вÑоÑого байÑа.
Ðо иÑÑоÑиÑеÑким пÑиÑинам ÑÑнкÑÐ¸Ñ md5 возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение в ÑеÑÑнадÑаÑеÑиÑном виде в Ñипе text, Ñогда как ÑÑнкÑии SHA-2 возвÑаÑаÑÑ Ñип bytea. ÐÐ»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¸Ð· одного пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² дÑÑгое иÑполÑзÑйÑе ÑÑнкÑии encode и decode. ÐапÑимеÑ, вÑзвав encode(sha256('abc'), 'hex'), Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе знаÑение в ÑеÑÑнадÑаÑеÑиÑном виде в ÑекÑÑовой ÑÑÑоке, а decode(md5('abc'), 'hex') вÑдаÑÑ Ð·Ð½Ð°Ñение bytea.
РТаблиÑе 9.13 Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ ÑÑнкÑии Ð´Ð»Ñ Ð¿ÐµÑекодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑекÑÑа из одного набоÑа Ñимволов (кодиÑовки) в дÑÑгой и Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑоизволÑнÑÑ
двоиÑнÑÑ
даннÑÑ
в ÑекÑÑовом виде. ÐÐ»Ñ Ð²ÑеÑ
ÑÑиÑ
ÑÑнкÑий аÑгÑÐ¼ÐµÐ½Ñ Ð¸Ð»Ð¸ ÑезÑлÑÑÐ°Ñ Ñипа text ÑодеÑÐ¶Ð¸Ñ ÑекÑÑ Ð² ÑекÑÑей кодиÑовке Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, Ñогда как аÑгÑменÑÑ Ð¸Ð»Ð¸ ÑезÑлÑÑаÑÑ Ñипа bytea ÑодеÑÐ¶Ð°Ñ ÑекÑÑ Ð² кодиÑовке, заданной ÑооÑвеÑÑÑвÑÑÑим аÑгÑменÑом.
ТаблиÑа 9.13. ФÑнкÑии Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑекÑÑовÑÑ /двоиÑнÑÑ ÑÑÑок
ФÑнкÑÐ¸Ñ ÐпиÑание ÐÑимеÑ(Ñ) |
|---|
ÐÑеобÑазÑÐµÑ Ð´Ð²Ð¾Ð¸ÑнÑÑ ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑекÑÑ Ð² кодиÑовке
|
ÐÑеобÑазÑÐµÑ Ð´Ð²Ð¾Ð¸ÑнÑÑ ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑекÑÑ Ð² кодиÑовке
|
ÐÑеобÑазÑÐµÑ ÑÑÑÐ¾ÐºÑ Ñипа
|
ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð´Ð²Ð¾Ð¸ÑнÑе даннÑе в ÑекÑÑовое пÑедÑÑавление; поддеÑживаÑÑÑÑ ÑледÑÑÑие знаÑениÑ
|
ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð´Ð²Ð¾Ð¸ÑнÑе даннÑе из ÑекÑÑового пÑедÑÑавлениÑ; поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñе же знаÑениÑ
|
ФÑнкÑии encode и decode поддеÑживаÑÑ ÑледÑÑÑие ÑекÑÑовÑе ÑоÑмаÑÑ:
- base64
ФоÑмаÑ
base64опиÑан в RFC 2045, Разделе 6.8. СоглаÑно ÑÑÐ¾Ð¼Ñ RFC, закодиÑованнÑе ÑÑÑоки ÑазбиваÑÑÑÑ Ð¿Ð¾ 76 Ñимволов. Ðднако завеÑÑаÑÑÑÑ ÑÑÑоки не Ñимволами CRLF (как ÑÑебÑеÑÑÑ Ð² ÑооÑвеÑÑÑвии Ñ MIME), а одним Ñимволом конÑа ÑÑÑоки. ФÑнкÑиÑdecode, Ñ Ð´ÑÑгой ÑÑоÑонÑ, игноÑиÑÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿ÐµÑевода каÑеÑки, новой ÑÑÑоки, пÑÐ¾Ð±ÐµÐ»Ñ Ð¸ ÑабÑлÑÑии. ÐÑли на Ð²Ñ Ð¾Ð´decodeпоÑÑÑпаÑÑ Ð½ÐµÐºÐ¾ÑÑекÑнÑе даннÑе base64, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка â в Ñом ÑиÑле, еÑли оказÑваеÑÑÑ Ð½ÐµÐºÐ¾ÑÑекÑнÑм завеÑÑаÑÑее вÑÑавнивание.- escape
Ð ÑоÑмаÑе
escapeнÑлевÑе байÑÑ Ð¸ байÑÑ Ñ ÑÑÑановленнÑм ÑÑаÑÑим биÑом пеÑеводÑÑÑÑ Ð² воÑÑмеÑиÑнÑе ÑпеÑпоÑледоваÑелÑноÑÑи (\nnn), а обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа дÑблиÑÑеÑÑÑ. ÐÑÑгие байÑовÑе знаÑÐµÐ½Ð¸Ñ Ð¿ÑедÑÑавлÑÑÑÑÑ Ð² бÑквалÑном виде. ФÑнкÑиÑdecodeвÑдаÑÑ Ð¾ÑибкÑ, вÑÑÑеÑив обÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ, за коÑоÑой не ÑледÑÐµÑ ÐµÑÑ Ð¾Ð´Ð½Ð° обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ Ð¸Ð»Ð¸ ÑÑи воÑÑмеÑиÑнÑÑ ÑиÑÑÑ; дÑÑгие знаÑÐµÐ½Ð¸Ñ Ð±Ð°Ð¹Ñа она пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð±ÐµÐ· изменений.- hex
Ð ÑоÑмаÑе
hexкаждÑе 4 биÑа даннÑÑ Ð¿ÑедÑÑавлÑÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð¹ ÑеÑÑнадÑаÑеÑиÑной ÑиÑÑой, оÑ0доf, пÑи ÑÑом пеÑвой идÑÑ ÑиÑÑа, пÑедÑÑавлÑÑÑÐ°Ñ ÑÑаÑÑие биÑÑ. ШеÑÑнадÑаÑеÑиÑнÑе ÑиÑÑÑa-fÑÑнкÑиÑencodeвÑÐ²Ð¾Ð´Ð¸Ñ Ð² нижнем ÑегиÑÑÑе. Так как наименÑÑÐ°Ñ ÐµÐ´Ð¸Ð½Ð¸Ñа даннÑÑ â Ð±Ð°Ð¹Ñ (8 биÑ), ÑÑнкÑиÑencodeвÑегда возвÑаÑÐ°ÐµÑ ÑÑÑное колиÑеÑÑво Ñимволов. ФÑнкÑиÑdecode, Ñ Ð´ÑÑгой ÑÑоÑонÑ, пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑимволÑa-fв лÑбом ÑегиÑÑÑе. ÐÑли на Ð²Ñ Ð¾Ð´ ÑÑнкÑииdecodeпоÑÑÑпаÑÑ Ð½ÐµÐºÐ¾ÑÑекÑнÑе даннÑе, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¾Ñибка â в Ñом ÑиÑле, еÑли ÑиÑло Ñимволов оказÑваеÑÑÑ Ð½ÐµÑÑÑнÑм.
См. Ñакже агÑегаÑнÑÑ ÑÑнкÑÐ¸Ñ string_agg в Разделе 9.21 и ÑÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñ Ð±Ð¾Ð»ÑÑими обÑекÑами в Разделе 35.4.