9.4. СÑÑоковÑе ÑÑнкÑии и опеÑаÑоÑÑ #
Ð ÑÑом Ñазделе опиÑÐ°Ð½Ñ ÑÑнкÑии и опеÑаÑоÑÑ Ð´Ð»Ñ ÑабоÑÑ Ñ ÑекÑÑовÑми ÑÑÑоками. Ðод ÑÑÑоками в данном конÑекÑÑе подÑазÑмеваÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñипов character, character varying и text. ÐÑли не оÑмеÑено обÑаÑное, ÑÑи ÑÑнкÑии и опеÑаÑоÑÑ Ð¿ÑинимаÑÑ Ð¸ возвÑаÑаÑÑ Ñип text. С Ñем же ÑÑпеÑ
ом в аÑгÑменÑаÑ
Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑедаваÑÑÑÑ Ñип character varying. ÐÑгÑменÑÑ Ð¶Ðµ Ñипа character до вÑзова опеÑаÑоÑа или ÑÑнкÑии пÑиводÑÑÑÑ Ðº ÑÐ¸Ð¿Ñ text, вÑледÑÑвие Ñего завеÑÑаÑÑие пÑÐ¾Ð±ÐµÐ»Ñ Ð² знаÑении character бÑдÑÑ Ð¾Ð±ÑезаÑÑÑÑ.
Ð SQL опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð½ÐµÑколÑко ÑÑÑоковÑÑ ÑÑнкÑий, в коÑоÑÑÑ Ð°ÑгÑменÑÑ ÑазделÑÑÑÑÑ Ð½Ðµ запÑÑÑми, а клÑÑевÑми Ñловами. Ðни пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.9. PostgreSQL Ñакже пÑедоÑÑавлÑÐµÑ Ð²Ð°ÑианÑÑ ÑÑÐ¸Ñ ÑÑнкÑий Ñ ÑинÑакÑиÑом, обÑÑнÑм Ð´Ð»Ñ ÑÑнкÑий (Ñм. ТаблиÑÑ 9.10).
ÐÑимеÑание
ÐпеÑаÑÐ¾Ñ ÐºÐ¾Ð½ÐºÐ°ÑенаÑии ÑÑÑок (||) ÑÐ¼Ð¾Ð¶ÐµÑ Ð¿ÑинÑÑÑ Ð½ÐµÑÑÑоковÑй аÑгÑменÑ, еÑли Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð¸Ð½ аÑгÑÐ¼ÐµÐ½Ñ Ð¸Ð¼ÐµÐµÑ ÑÑÑоковÑй Ñип, как показано в ТаблиÑе 9.9. РдÑÑгиÑ
ÑлÑÑаÑÑ
можно иÑполÑзоваÑÑ Ñвное пÑеобÑазование в text, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð¿ÑинÑл неÑÑÑоковÑй аÑгÑменÑ.
ТаблиÑа 9.9. СÑÑоковÑе ÑÑнкÑии и опеÑаÑоÑÑ ÑзÑка SQL
ФÑнкÑиÑ/опеÑаÑÐ¾Ñ ÐпиÑание ÐÑимеÑ(Ñ) |
|---|
СоединÑÐµÑ Ð´Ð²Ðµ ÑÑÑоки.
|
ÐÑеобÑазÑÐµÑ Ð½ÐµÑÑÑоковÑй аÑгÑÐ¼ÐµÐ½Ñ Ð² ÑекÑÑ, а заÑем ÑоединÑÐµÑ Ð´Ð²Ðµ ÑÑÑоки. (ÐеÑÑÑоковÑй аÑгÑÐ¼ÐµÐ½Ñ Ð½Ðµ должен бÑÑÑ Ð¼Ð°ÑÑивом, инаÑе Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑноÑÑÑ Ñ Ð¾Ð¿ÐµÑаÑоÑами маÑÑивов
|
УдалÑÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑолÑко ÑимволÑ
|
ÐÑовеÑÑеÑ, ÑооÑвеÑÑÑвÑÐµÑ Ð»Ð¸ ÑÑÑока опÑеделÑнной ÑоÑме ноÑмализаÑии Юникода. ФоÑма ÑказÑваеÑÑÑ Ð² необÑзаÑелÑном клÑÑевом Ñлове
|
ÐозвÑаÑÐ°ÐµÑ ÑиÑло Ð±Ð¸Ñ Ð² ÑÑÑоке (ÑÑо ÑиÑло в 8 Ñаз болÑÑе
|
ÐозвÑаÑÐ°ÐµÑ ÑиÑло Ñимволов в ÑÑÑоке.
|
ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑÑÑоки в нижний ÑегиÑÑÑ Ð² ÑооÑвеÑÑÑвии Ñ Ð¿Ñавилами локали Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .
|
ÐополнÑÐµÑ ÑÑÑокÑ
|
УдалÑÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑолÑко ÑимволÑ
|
ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ ÑÑÑÐ¾ÐºÑ Ð² заданнÑÑ ÑоÑÐ¼Ñ Ð½Ð¾ÑмализаÑии Unicode. ФоÑма ÑказÑваеÑÑÑ Ð² необÑзаÑелÑном клÑÑевом Ñлове
|
ÐозвÑаÑÐ°ÐµÑ ÑиÑло Ð±Ð°Ð¹Ñ Ð² ÑÑÑоке.
|
ÐозвÑаÑÐ°ÐµÑ ÑиÑло Ð±Ð°Ð¹Ñ Ð² ÑÑÑоке. Так как ÑÑа ваÑиаÑÐ¸Ñ ÑÑнкÑии пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно Ñип
|
ÐаменÑÐµÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ Ð²
|
ÐозвÑаÑÐ°ÐµÑ Ð½Ð°ÑалÑнÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð¿ÐµÑвого вÑ
ождениÑ
|
ÐополнÑÐµÑ ÑÑÑокÑ
|
УдалÑÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑолÑко ÑимволÑ
|
ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¸Ð·
|
ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¿ÐµÑвÑÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑооÑвеÑÑÑвÑÑÑÑÑ ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÑиле POSIX; Ñм. ÐодÑаздел 9.7.3.
|
ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¿ÐµÑвÑÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑооÑвеÑÑÑвÑÑÑÑÑ ÑегÑлÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² ÑÑиле SQL; Ñм. ÐодÑаздел 9.7.2. ÐеÑÐ²Ð°Ñ ÑоÑма опÑеделена в ÑÑандаÑÑе, наÑÐ¸Ð½Ð°Ñ Ñ SQL:2003, а вÑоÑÐ°Ñ ÑÑÑеÑÑвовала ÑолÑко в ÑÑандаÑÑе SQL:1999 и ÐµÑ ÑледÑÐµÑ ÑÑиÑаÑÑ ÑÑÑаÑевÑей.
|
УдалÑÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑÑÑ Ð¿Ð¾Ð´ÑÑÑокÑ, ÑодеÑжаÑÑÑ ÑолÑко ÑимволÑ
|
ÐÑо неÑÑандаÑÑнÑй ÑинÑакÑÐ¸Ñ Ð²Ñзова
|
ÐозвÑаÑÐ°ÐµÑ |
ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑÑÑоки в веÑÑ Ð½Ð¸Ð¹ ÑегиÑÑÑ, в ÑооÑвеÑÑÑвии Ñ Ð¿Ñавилами локали Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .
|
ÐÑоме ÑÑого, в PostgreSQL еÑÑÑ Ð¸ дÑÑгие ÑÑнкÑии Ð´Ð»Ñ ÑабоÑÑ Ñо ÑÑÑоками, пеÑеÑиÑленнÑе в ТаблиÑе 9.10. (ÐекоÑоÑÑе из Ð½Ð¸Ñ Ð¸ÑполÑзÑÑÑÑÑ Ð² каÑеÑÑве внÑÑÑенней ÑеализаÑии ÑÑандаÑÑнÑÑ ÑÑÑоковÑÑ ÑÑнкÑий SQL, пÑиведÑннÑÑ Ð² ТаблиÑе 9.9.) Также имеÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñаблонов, опиÑаннÑе в Разделе 9.7, и опеÑаÑоÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑекÑÑового поиÑка, опиÑаннÑе в Ðлаве 12.
ТаблиÑа 9.10. ÐÑÑгие ÑÑÑоковÑе ÑÑнкÑии и опеÑаÑоÑÑ
ФÑнкÑиÑ/опеÑаÑÐ¾Ñ ÐпиÑание ÐÑимеÑ(Ñ) |
|---|
ÐозвÑаÑÐ°ÐµÑ true, еÑли пеÑÐ²Ð°Ñ ÑÑÑока наÑинаеÑÑÑ Ñо вÑоÑой ÑÑÑоки (ÑавнознаÑно ÑÑнкÑии
|
ÐозвÑаÑÐ°ÐµÑ ÑиÑловой код пеÑвого Ñимвола аÑгÑменÑа. ÐÐ»Ñ UTF8 возвÑаÑÐ°ÐµÑ ÐºÐ¾Ð´ Ñимвола в Unicode. ÐÐ»Ñ Ð´ÑÑÐ³Ð¸Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð±Ð°Ð¹ÑнÑÑ ÐºÐ¾Ð´Ð¸Ñовок аÑгÑÐ¼ÐµÐ½Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ ASCII-Ñимволом.
|
ÐозвÑаÑÐ°ÐµÑ Ñимвол Ñ Ð´Ð°Ð½Ð½Ñм кодом. ÐÐ»Ñ UTF8 аÑгÑÐ¼ÐµÐ½Ñ Ð²Ð¾ÑпÑинимаеÑÑÑ ÐºÐ°Ðº код Ñимвола Unicode, а Ð´Ð»Ñ Ð´ÑÑгиÑ
кодиÑовок он должен ÑказÑваÑÑ Ð½Ð° ASCII-Ñимвол. ÐÑа ÑÑнкÑÐ¸Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑдаÑÑ
|
СоединÑÐµÑ ÑекÑÑовÑе пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÑÐµÑ Ð°ÑгÑменÑов, игноÑиÑÑÑ NULL.
|
СоединÑÐµÑ Ð²Ð¼ÐµÑÑе вÑе аÑгÑменÑÑ, кÑоме пеÑвого, ÑеÑез ÑазделиÑелÑ. РазделиÑÐµÐ»Ñ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð² пеÑвом аÑгÑменÑе и должен бÑÑÑ Ð¾ÑлиÑен Ð¾Ñ NULL. РдÑÑÐ³Ð¸Ñ Ð°ÑгÑменÑÐ°Ñ Ð·Ð½Ð°Ñение NULL игноÑиÑÑеÑÑÑ.
|
ФоÑмаÑиÑÑÐµÑ Ð°ÑгÑменÑÑ Ð² ÑооÑвеÑÑÑвии Ñо ÑÑÑокой ÑоÑмаÑа; Ñм. ÐодÑаздел 9.4.1. ÐÑа ÑÑнкÑÐ¸Ñ ÑабоÑÐ°ÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾
|
ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð¿ÐµÑвÑÑ Ð±ÑÐºÐ²Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñлова в ÑÑÑоке в веÑÑ Ð½Ð¸Ð¹ ÑегиÑÑÑ, а оÑÑалÑнÑе â в нижний. Словами ÑÑиÑаÑÑÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑи алÑавиÑно-ÑиÑÑовÑÑ Ñимволов, ÑазделÑннÑе лÑбÑми дÑÑгими Ñимволами.
|
ÐозвÑаÑÐ°ÐµÑ Ð¿ÐµÑвÑе
|
ÐозвÑаÑÐ°ÐµÑ ÑиÑло Ñимволов в ÑÑÑоке.
|
ÐÑÑиÑлÑÐµÑ MD5-Ñ ÐµÑ Ð°ÑгÑменÑа и вÑдаÑÑ ÑезÑлÑÑÐ°Ñ Ð² ÑеÑÑнадÑаÑеÑиÑном виде.
|
РаÑкладÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»Ð½Ñй иденÑиÑикаÑоÑ, задаваемÑй паÑамеÑÑом
|
ÐозвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ ÑекÑÑей клиенÑÑкой кодиÑовки.
|
ÐÑеобÑазÑÐµÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ð² ÑÑÑокÑ, Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑÑÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² каÑеÑÑве иденÑиÑикаÑоÑа в SQL-опеÑаÑоÑе. ÐÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи иденÑиÑикаÑÐ¾Ñ Ð·Ð°ÐºÐ»ÑÑаеÑÑÑ Ð² кавÑÑки (напÑимеÑ, еÑли он ÑодеÑÐ¶Ð¸Ñ ÑимволÑ, недопÑÑÑимÑе в оÑкÑÑÑом виде, или бÑÐºÐ²Ñ Ð² ÑазнÑÑ ÑегиÑÑÑÐ°Ñ ). ÐÑли пеÑÐµÐ´Ð°Ð½Ð½Ð°Ñ ÑÑÑока ÑодеÑÐ¶Ð¸Ñ ÐºÐ°Ð²ÑÑки, они дÑблиÑÑÑÑÑÑ. См. Ñакже ÐÑимеÑ 41.1.
|
ÐÑеобÑазÑÐµÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ð² ÑÑÑокÑ, подÑ
одÑÑÑÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² каÑеÑÑве ÑекÑÑовой конÑÑанÑÑ Ð² SQL-опеÑаÑоÑе. ÐнÑÑÑенние ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð°Ð¿Ð¾ÑÑÑÐ¾Ñ Ð¸ обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа пÑи ÑÑом дÑблиÑÑÑÑÑÑ. ÐамеÑÑÑе, ÑÑо
|
ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ðµ знаÑение в ÑекÑÑовÑй вид и заклÑÑÐ°ÐµÑ Ð² апоÑÑÑоÑÑ ÐºÐ°Ðº ÑекÑÑовÑÑ ÑÑÑокÑ. Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Ð°Ð¿Ð¾ÑÑÑÐ¾Ñ Ð¸ обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа пÑи ÑÑом дÑблиÑÑÑÑÑÑ.
|
ÐÑеобÑазÑÐµÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ð² ÑÑÑокÑ, подÑ
одÑÑÑÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² каÑеÑÑве ÑекÑÑовой конÑÑанÑÑ Ð² SQL-опеÑаÑоÑе; пÑи ÑÑом Ð´Ð»Ñ Ð°ÑгÑменÑа NULL возвÑаÑаеÑÑÑ ÑÑÑока
|
ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ðµ знаÑение в ÑекÑÑовÑй вид и заклÑÑÐ°ÐµÑ Ð² апоÑÑÑоÑÑ ÐºÐ°Ðº ÑекÑÑовÑÑ ÑÑÑокÑ, пÑи ÑÑом Ð´Ð»Ñ Ð°ÑгÑменÑа NULL возвÑаÑаеÑÑÑ ÑÑÑока
|
ÐозвÑаÑÐ°ÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво вÑ
ождений ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ POSIX
|
ÐозвÑаÑÐ°ÐµÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð² ÑÑÑоке
|
ÐÑовеÑÑеÑ, еÑÑÑ Ð»Ð¸ в ÑÑÑоке
|
ÐозвÑаÑÐ°ÐµÑ Ð¿Ð¾Ð´ÑÑÑоки из пеÑвого вÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ POSIX
|
ÐозвÑаÑÐ°ÐµÑ Ð¿Ð¾Ð´ÑÑÑоки из пеÑвого вÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ POSIX
{bar}
{baz} |
ÐаменÑÐµÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ Ð¿ÐµÑвого вÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÑегÑлÑÑного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ POSIX
|
ÐаменÑÐµÑ Ð¿Ð¾Ð´ÑÑÑокÑ
|
РазделÑÐµÑ ÑодеÑжимое
|
РазделÑÐµÑ ÑодеÑжимое
hello world |
ÐозвÑаÑÐ°ÐµÑ Ð¿Ð¾Ð´ÑÑÑокÑ
|
ÐовÑоÑÑÐµÑ ÑодеÑжимое
|
ÐаменÑÐµÑ Ð²Ñе вÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²
|
ÐеÑеÑÑавлÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² ÑÑÑоке в обÑаÑном поÑÑдке.
|
ÐозвÑаÑÐ°ÐµÑ Ð¿Ð¾Ñледние
|
РазделÑÐµÑ ÑÑÑокÑ
|
ÐозвÑаÑаеÑ
|
РазделÑÐµÑ Ð·Ð°Ð´Ð°Ð½Ð½ÑÑ Ð¿Ð°ÑамеÑÑом
|
РазделÑÐµÑ Ð·Ð°Ð´Ð°Ð½Ð½ÑÑ Ð¿Ð°ÑамеÑÑом
xx NULL zz |
ÐозвÑаÑÐ°ÐµÑ Ð½Ð°ÑалÑнÑÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð¿ÐµÑвого вÑ
ождениÑ
|
ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¸Ð·
|
ÐÑеобÑазÑеÑ
|
ÐÑеобÑазÑÐµÑ ÑиÑло в двоиÑное пÑедÑÑавление в дополниÑелÑном коде.
|
ÐÑеобÑазÑÐµÑ ÑиÑло в ÑеÑÑнадÑаÑеÑиÑное пÑедÑÑавление в дополниÑелÑном коде.
|
ÐÑеобÑазÑÐµÑ ÑиÑло в воÑÑмеÑиÑное пÑедÑÑавление в дополниÑелÑном коде.
|
ÐаменÑÐµÑ ÐºÐ°Ð¶Ð´Ñй Ñимвол в
|
ÐÑеобÑазÑÐµÑ ÑпеÑпоÑледоваÑелÑноÑÑи Unicode в аÑгÑменÑе. Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Unicode могÑÑ Ð±ÑÑÑ Ð·Ð°Ð´Ð°Ð½Ñ ÐºÐ°Ðº Ðогда кодиÑовка ÑеÑвеÑа â не UTF-8, Ñимвол Ñ ÐºÐ¾Ð´Ð¾Ð¼, заданнÑм ÑÑой ÑпеÑпоÑледоваÑелÑноÑÑÑÑ, пÑеобÑазÑеÑÑÑ Ð² ÑакÑиÑеÑкÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ ÑеÑвеÑа; еÑли Ñакое пÑеобÑазование невозможно, вÑдаÑÑÑÑ Ð¾Ñибка. ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑедоÑÑавлÑÐµÑ (неÑÑандаÑÑнÑÑ) алÑÑеÑнаÑÐ¸Ð²Ñ ÑÑÑоковÑм конÑÑанÑам Ñо ÑпеÑпоÑледоваÑелÑноÑÑÑми Unicode (Ñм. ÐодÑаздел 4.1.2.3).
|
ФÑнкÑии concat, concat_ws и format пÑинимаÑÑ Ð¿ÐµÑеменное ÑиÑло аÑгÑменÑов, Ñак ÑÑо им Ð´Ð»Ñ Ð¾Ð±ÑÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пеÑедаваÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² виде маÑÑива, помеÑенного клÑÑевÑм Ñловом VARIADIC (Ñм. ÐодÑаздел 36.5.6). ÐлеменÑÑ Ñакого маÑÑива обÑабаÑÑваÑÑÑÑ, как еÑли Ð±Ñ Ð¾Ð½Ð¸ бÑли обÑÑнÑми аÑгÑменÑами ÑÑнкÑии. ÐÑли вмеÑÑо маÑÑива в ÑооÑвеÑÑÑвÑÑÑем аÑгÑменÑе пеÑедаÑÑÑÑ NULL, ÑÑнкÑии concat и concat_ws возвÑаÑаÑÑ NULL, а format воÑпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ NULL как маÑÑив нÑлевого ÑазмеÑа.
Также обÑаÑиÑе внимание на агÑегаÑнÑÑ ÑÑнкÑÐ¸Ñ string_agg в Разделе 9.21 и ÑÑнкÑии Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑекÑÑа в bytea и наобоÑÐ¾Ñ Ð² ТаблиÑе 9.13.
9.4.1. format #
ФÑнкÑÐ¸Ñ format вÑдаÑÑ ÑекÑÑ, оÑÑоÑмаÑиÑованнÑй в ÑооÑвеÑÑÑвии Ñо ÑÑÑокой ÑоÑмаÑа, подобно ÑÑнкÑии sprintf в C.
format(formatstrtext[,formatarg"any"[, ...] ])
formatstr â ÑÑÑока, опÑеделÑÑÑаÑ, как бÑÐ´ÐµÑ ÑоÑмаÑиÑоваÑÑÑÑ ÑезÑлÑÑаÑ. ÐбÑÑнÑй ÑекÑÑ Ð² ÑÑÑоке ÑоÑмаÑа непоÑÑедÑÑвенно копиÑÑеÑÑÑ Ð² ÑезÑлÑÑаÑ, за иÑклÑÑением ÑпеÑиÑикаÑоÑов ÑоÑмаÑа. СпеÑиÑикаÑоÑÑ ÑоÑмаÑа пÑедÑÑавлÑÑÑ Ñобой меÑÑозаполниÑели, опÑеделÑÑÑие, как Ð´Ð¾Ð»Ð¶Ð½Ñ ÑоÑмаÑиÑоваÑÑÑÑ Ð¸ вÑводиÑÑÑÑ Ð² ÑезÑлÑÑаÑе аÑгÑменÑÑ ÑÑнкÑии. ÐаждÑй аÑгÑÐ¼ÐµÐ½Ñ formatarg пÑеобÑазÑеÑÑÑ Ð² ÑекÑÑ Ð¿Ð¾ пÑавилам вÑвода Ñвоего Ñипа даннÑÑ
, а заÑем ÑоÑмаÑиÑÑеÑÑÑ Ð¸ вÑÑавлÑеÑÑÑ Ð² ÑезÑлÑÑиÑÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ ÑоглаÑно ÑпеÑиÑикаÑоÑам ÑоÑмаÑа.
СпеÑиÑикаÑоÑÑ ÑоÑмаÑа пÑедваÑÑÑÑÑÑ Ñимволом % и имеÑÑ ÑоÑмÑ
%[position][flags][width]type
ÐдеÑÑ:
position(необÑзаÑелÑнÑй)СÑÑока вида
, гдеn$nâ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ñводимого аÑгÑменÑа. ÐндекÑ, ÑавнÑй 1, вÑбиÑÐ°ÐµÑ Ð¿ÐµÑвÑй аÑгÑÐ¼ÐµÐ½Ñ Ð¿Ð¾Ñлеformatstr. ÐÑлиpositionопÑÑкаеÑÑÑ, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ ÑледÑÑÑий аÑгÑÐ¼ÐµÐ½Ñ Ð¿Ð¾ поÑÑдкÑ.flags(необÑзаÑелÑнÑй)ÐополниÑелÑнÑе Ñлаги, ÑпÑавлÑÑÑие ÑоÑмаÑиÑованием данного ÑпеÑиÑикаÑоÑа. РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑолÑко знак минÑÑ (
-), коÑоÑÑй вÑÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ ÑезÑлÑÑÐ°Ñ ÑпеÑиÑикаÑоÑа по Ð»ÐµÐ²Ð¾Ð¼Ñ ÐºÑаÑ. ÐÑÐ¾Ñ Ñлаг ÑабоÑаеÑ, ÑолÑко еÑли Ñакже опÑеделено полеwidth.width(необÑзаÑелÑнÑй)ÐадаÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»Ñное ÑиÑло Ñимволов, коÑоÑое бÑÐ´ÐµÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ ÑезÑлÑÑÐ°Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑпеÑиÑикаÑоÑа. ÐÑводимое знаÑение вÑÑавниваеÑÑÑ Ð¿Ð¾ пÑавой или левой ÑÑоÑоне (в завиÑимоÑÑи Ð¾Ñ Ñлага
-) Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñм ÑиÑлом пÑобелов. ÐÑли ÑиÑина ÑлиÑком мала, она пÑоÑÑо игноÑиÑÑеÑÑÑ, Ñ. е. ÑезÑлÑÑÐ°Ñ Ð½Ðµ ÑÑекаеÑÑÑ. ШиÑÐ¸Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð¾ обознаÑиÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑм ÑелÑм, звÑздоÑкой (*), Ñогда ÑиÑина бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑена из ÑледÑÑÑего аÑгÑменÑа ÑÑнкÑии, или ÑÑÑокой вида*, Ñогда ÑиÑина бÑÐ´ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð²n$n-м аÑгÑменÑе ÑÑнкÑии.ÐÑли ÑиÑина пеÑедаÑÑÑÑ Ð² аÑгÑменÑе ÑÑнкÑии, ÑÑÐ¾Ñ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ð²ÑбиÑаеÑÑÑ Ð´Ð¾ аÑгÑменÑа, иÑполÑзÑемого Ð´Ð»Ñ ÑпеÑиÑикаÑоÑа. ÐÑли аÑгÑÐ¼ÐµÐ½Ñ ÑиÑÐ¸Ð½Ñ Ð¾ÑÑиÑаÑелÑнÑй, ÑезÑлÑÑÐ°Ñ Ð²ÑÑавниваеÑÑÑ Ð¿Ð¾ левой ÑÑоÑоне (как еÑли Ð±Ñ Ð±Ñл Ñказан Ñлаг
-) в ÑÐ°Ð¼ÐºÐ°Ñ Ð¿Ð¾Ð»Ñ Ð´Ð»Ð¸Ð½Ñabs(width).type(обÑзаÑелÑнÑй)Тип ÑпеÑиÑикаÑоÑа опÑеделÑÐµÑ Ð¿ÑеобÑазование ÑооÑвеÑÑÑвÑÑÑего вÑводимого знаÑениÑ. ÐоддеÑживаÑÑÑÑ ÑледÑÑÑие ÑипÑ:
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')
СледÑÑÑие пÑимеÑÑ Ð¸Ð»Ð»ÑÑÑÑиÑÑÑÑ Ð¸ÑполÑзование Ð¿Ð¾Ð»Ñ width и Ñлага -:
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 |
ÐÑи пÑимеÑÑ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ Ð¿Ñименение полей position:
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 позволÑÐµÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð¸ÑоваÑÑ Ð² одной ÑÑÑоке ÑпеÑиÑикаÑоÑÑ Ñ Ð¿Ð¾Ð»Ñми position и без ниÑ
. СпеÑиÑикаÑÐ¾Ñ ÑоÑмаÑа без Ð¿Ð¾Ð»Ñ position вÑегда иÑполÑзÑÐµÑ ÑледÑÑÑий аÑгÑÐ¼ÐµÐ½Ñ Ð¿Ð¾Ñле поÑледнего вÑбÑанного. ÐÑоме Ñого, ÑÑнкÑÐ¸Ñ format не ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð² ÑÑÑоке ÑоÑмаÑа иÑполÑзовалиÑÑ Ð²Ñе аÑгÑменÑÑ ÑÑнкÑии. ÐÑÐ¸Ð¼ÐµÑ ÑÑого поведениÑ:
SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
РезÑлÑÑаÑ: Testing three, two, three
СпеÑиÑикаÑоÑÑ ÑоÑмаÑа %I и %L оÑобенно Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð´Ð»Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñного ÑоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑкиÑ
опеÑаÑоÑов SQL. См. ÐÑимеÑ 41.1.