4.1. ÐекÑиÑеÑÐºÐ°Ñ ÑÑÑÑкÑÑÑа #
SQL-пÑогÑамма ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· поÑледоваÑелÑноÑÑи команд. Ðоманда, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, пÑедÑÑавлÑÐµÑ Ñобой поÑледоваÑелÑноÑÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñов, оканÑиваÑÑÑÑÑÑ ÑоÑкой Ñ Ð·Ð°Ð¿ÑÑой («;»). ÐÐ¾Ð½ÐµÑ Ð²Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ поÑока Ñакже ÑÑиÑаеÑÑÑ ÐºÐ¾Ð½Ñом командÑ. Ðакие именно компоненÑÑ Ð´Ð¾Ð¿ÑÑÑÐ¸Ð¼Ñ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑной командÑ, завиÑÐ¸Ñ Ð¾Ñ ÐµÑ ÑинÑакÑиÑа.
ÐомпоненÑом ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐºÐ»ÑÑевое Ñлово, иденÑиÑикаÑоÑ, иденÑиÑикаÑÐ¾Ñ Ð² кавÑÑÐºÐ°Ñ , ÑÑÑока (или конÑÑанÑа) или ÑпеÑиалÑнÑй Ñимвол. ÐомпоненÑÑ Ð¾Ð±ÑÑно ÑазделÑÑÑÑÑ Ð¿ÑобелÑнÑми Ñимволами (пÑобел, ÑабÑлÑÑиÑ, пеÑевод ÑÑÑоки), но ÑÑо не ÑÑебÑеÑÑÑ, еÑли Ð½ÐµÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑноÑÑи (напÑимеÑ, когда ÑпеÑÑимвол оказÑваеÑÑÑ ÑÑдом Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñом дÑÑгого Ñипа).
ÐапÑимеÑ, ÑледÑÑÑий ÑекÑÑ ÑвлÑеÑÑÑ Ð¿ÑавилÑной (ÑинÑакÑиÑеÑки) SQL-пÑогÑаммой:
SELECT * FROM MY_TABLE; UPDATE MY_TABLE SET A = 5; INSERT INTO MY_TABLE VALUES (3, 'hi there');
ÐÑо поÑледоваÑелÑноÑÑÑ ÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´, по одной в ÑÑÑоке (Ñ Ð¾ÑÑ Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло ÑазмеÑÑиÑÑ Ð¸ в Ð¾Ð´Ð½Ñ ÑÑÑÐ¾ÐºÑ Ð¸Ð»Ð¸ наобоÑоÑ, ÑазделиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð½Ð° неÑколÑко ÑÑÑок).
ÐÑоме ÑÑого, SQL-пÑогÑÐ°Ð¼Ð¼Ñ Ð¼Ð¾Ð³ÑÑ ÑодеÑжаÑÑ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑии. Ðни не ÑвлÑÑÑÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñами команд, а по ÑÑÑи ÑавноÑилÑÐ½Ñ Ð¿ÑобелÑнÑм Ñимволам.
СинÑакÑÐ¸Ñ SQL не оÑÐµÐ½Ñ ÑÑÑого опÑеделÑеÑ, какие компоненÑÑ Ð¸Ð´ÐµÐ½ÑиÑиÑиÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, а какие â иÑ
опеÑÐ°Ð½Ð´Ñ Ð¸Ð»Ð¸ паÑамеÑÑÑ. ÐеÑвÑе неÑколÑко компоненÑов обÑÑно ÑодеÑÐ¶Ð°Ñ Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, Ñак ÑÑо в данном пÑимеÑе Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ говоÑиÑÑ Ð¾ командаÑ
«SELECT», «UPDATE» и «INSERT». Ðо напÑимеÑ, команда UPDATE ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ñакже в опÑеделÑнном положении вÑегда ÑÑоÑл ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ SET, а INSERT в пÑиведÑнном виде ÑÑебÑÐµÑ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñа VALUES. ТоÑнÑе ÑинÑакÑиÑеÑкие пÑавила Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² ЧаÑÑи VI.
4.1.1. ÐденÑиÑикаÑоÑÑ Ð¸ клÑÑевÑе Ñлова #
ÐоказаннÑе вÑÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÑодеÑжали компоненÑÑ SELECT, UPDATE и VALUES, коÑоÑÑе ÑвлÑÑÑÑÑ Ð¿ÑимеÑами клÑÑевÑÑ
Ñлов, Ñо еÑÑÑ Ñлов, имеÑÑиÑ
ÑикÑиÑованное знаÑение в ÑзÑке SQL. ÐомпоненÑÑ MY_TABLE и A ÑвлÑÑÑÑÑ Ð¿ÑимеÑами иденÑиÑикаÑоÑов. Ðни иденÑиÑиÑиÑÑÑÑ Ð¸Ð¼ÐµÐ½Ð° ÑаблиÑ, ÑÑолбÑов или дÑÑгиÑ
обÑекÑов баз даннÑÑ
, в завиÑимоÑÑи Ð¾Ñ Ñого, где они иÑполÑзÑÑÑÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð¸Ð½Ð¾Ð³Ð´Ð° иÑ
назÑваÑÑ Ð¿ÑоÑÑо «именами». ÐлÑÑевÑе Ñлова и иденÑиÑикаÑоÑÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²ÑÑ Ð»ÐµÐºÑиÑеÑкÑÑ ÑÑÑÑкÑÑÑÑ, Ñо еÑÑÑ, не Ð·Ð½Ð°Ñ ÑзÑка, нелÑÐ·Ñ Ð¾Ð¿ÑеделиÑÑ, ÑвлÑеÑÑÑ Ð»Ð¸ некоÑоÑÑй ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ ÐºÐ»ÑÑевÑм Ñловом или иденÑиÑикаÑоÑом. ÐолнÑй ÑпиÑок клÑÑевÑÑ
Ñлов пÑиведÑн в ÐÑиложении C.
ÐденÑиÑикаÑоÑÑ Ð¸ клÑÑевÑе Ñлова SQL Ð´Ð¾Ð»Ð¶Ð½Ñ Ð½Ð°ÑинаÑÑÑÑ Ñ Ð±ÑÐºÐ²Ñ (a-z, Ñ
оÑÑ Ð´Ð¾Ð¿ÑÑкаÑÑÑÑ Ñакже не лаÑинÑкие бÑÐºÐ²Ñ Ð¸ бÑÐºÐ²Ñ Ñ Ð´Ð¸Ð°ÐºÑиÑиÑеÑкими знаками) или подÑÑÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ (_). ÐоÑледÑÑÑими Ñимволами в иденÑиÑикаÑоÑе или клÑÑевом Ñлове могÑÑ Ð±ÑÑÑ Ð±ÑквÑ, ÑиÑÑÑ (0-9), знаки доллаÑа ($) или подÑÑÑкиваниÑ. ÐамеÑÑÑе, ÑÑо ÑÑÑого ÑледÑÑ Ð±Ñкве ÑÑандаÑÑа SQL, знаки доллаÑа нелÑÐ·Ñ Ð¸ÑполÑзоваÑÑ Ð² иденÑиÑикаÑоÑаÑ
, Ñак ÑÑо иÑ
иÑполÑзование вÑÐµÐ´Ð¸Ñ Ð¿ÐµÑеноÑимоÑÑи пÑиложений. Ð ÑÑандаÑÑе SQL гаÑанÑиÑованно не бÑÐ´ÐµÑ ÐºÐ»ÑÑевÑÑ
Ñлов Ñ ÑиÑÑами и наÑинаÑÑиÑ
ÑÑ Ð¸Ð»Ð¸ заканÑиваÑÑиÑ
ÑÑ Ð¿Ð¾Ð´ÑÑÑкиванием, Ñак ÑÑо иденÑиÑикаÑоÑÑ Ñакого вида заÑиÑÐµÐ½Ñ Ð¾Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½ÑÑ
конÑликÑов Ñ Ð±ÑдÑÑими ÑаÑÑиÑениÑми ÑÑандаÑÑа.
СиÑÑема вÑделÑÐµÑ Ð´Ð»Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑа не более NAMEDATALEN-1 байÑ, а более длиннÑе имена ÑÑекаÑÑÑÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ NAMEDATALEN Ñавно 64, Ñак ÑÑо макÑималÑÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° иденÑиÑикаÑоÑа Ñавна 63 байÑам.
ÐлÑÑевÑе Ñлова и иденÑиÑикаÑоÑÑ Ð±ÐµÐ· кавÑÑек воÑпÑинимаÑÑÑÑ ÑиÑÑемой без ÑÑÑÑа ÑегиÑÑÑа. Таким обÑазом:
UPDATE MY_TABLE SET A = 5;
ÑавноÑилÑно запиÑи:
uPDaTE my_TabLE SeT a = 5;
ЧаÑÑо иÑполÑзÑеÑÑÑ Ð½ÐµÑоÑмалÑное ÑоглаÑение запиÑÑваÑÑ ÐºÐ»ÑÑевÑе Ñлова заглавнÑми бÑквами, а имена ÑÑÑоÑнÑми, напÑимеÑ:
UPDATE my_table SET a = 5;
ÐÑÑÑ Ð¸ дÑÑгой Ñип иденÑиÑикаÑоÑов: оÑделÑннÑе иденÑиÑикаÑоÑÑ Ð¸Ð»Ð¸ иденÑиÑикаÑоÑÑ Ð² кавÑÑкаÑ
. Ðни обÑазÑÑÑÑÑ Ð¿Ñи заклÑÑении обÑÑного набоÑа Ñимволов в двойнÑе кавÑÑки ("). Такие иденÑиÑикаÑоÑÑ Ð²Ñегда бÑдÑÑ ÑÑиÑаÑÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑами, но не клÑÑевÑми Ñловами. Так "select" можно иÑполÑзоваÑÑ Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑÑолбÑа или ÑаблиÑÑ Â«select», Ñогда как select без кавÑÑек бÑÐ´ÐµÑ Ð²Ð¾ÑпÑинÑÑ ÐºÐ°Ðº клÑÑевое Ñлово и пÑиведÑÑ Ðº оÑибке ÑазбоÑа ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² меÑÑе, где ожидаеÑÑÑ Ð¸Ð¼Ñ ÑаблиÑÑ Ð¸Ð»Ð¸ ÑÑолбÑа. Ð¢Ð¾Ñ Ð¶Ðµ пÑÐ¸Ð¼ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ пеÑепиÑаÑÑ Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑами в кавÑÑкаÑ
ÑледÑÑÑим обÑазом:
UPDATE "my_table" SET "a" = 5;
ÐденÑиÑикаÑоÑÑ Ð² кавÑÑÐºÐ°Ñ Ð¼Ð¾Ð³ÑÑ ÑодеÑжаÑÑ Ð»ÑбÑе ÑимволÑ, за иÑклÑÑением Ñимвола Ñ ÐºÐ¾Ð´Ð¾Ð¼ 0. (ЧÑÐ¾Ð±Ñ Ð²ÐºÐ»ÑÑиÑÑ Ð² Ñакой иденÑиÑикаÑÐ¾Ñ ÐºÐ°Ð²ÑÑки, пÑодÑблиÑÑйÑе Ð¸Ñ .) ÐÑо позволÑÐµÑ ÑоздаваÑÑ ÑаблиÑÑ Ð¸ ÑÑолбÑÑ Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸, коÑоÑÑе инаÑе бÑли Ð±Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ, напÑимеÑ, Ñ Ð¿Ñобелами или ампеÑÑандами. ÐгÑаниÑение Ð´Ð»Ð¸Ð½Ñ Ð¿Ñи ÑÑом ÑÐ¾Ñ ÑанÑеÑÑÑ.
ÐденÑиÑикаÑоÑ, заклÑÑÑннÑй в кавÑÑки, ÑÑановиÑÑÑ Ð·Ð°Ð²Ð¸ÑимÑм Ð¾Ñ ÑегиÑÑÑа, Ñогда как иденÑиÑикаÑоÑÑ Ð±ÐµÐ· кавÑÑек вÑегда пеÑеводÑÑÑÑ Ð² нижний ÑегиÑÑÑ. ÐапÑимеÑ, иденÑиÑикаÑоÑÑ FOO, foo и "foo" ÑÑиÑаÑÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми в Postgres Pro, но "Foo" и "FOO" оÑлиÑÐ½Ñ Ð´ÑÑг Ð¾Ñ Ð´ÑÑга и Ð¾Ñ Ð¿ÑедÑдÑÑиÑ
ÑÑÑÑ
. (ÐÑиведение имÑн без кавÑÑек к Ð½Ð¸Ð¶Ð½ÐµÐ¼Ñ ÑегиÑÑÑÑ, как ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Postgres Pro, неÑовмеÑÑимо Ñо ÑÑандаÑÑом SQL, коÑоÑÑй говоÑÐ¸Ñ Ð¾ Ñом, ÑÑо имена Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑиводиÑÑÑÑ Ðº веÑÑ
Ð½ÐµÐ¼Ñ ÑегиÑÑÑÑ. То еÑÑÑ, ÑоглаÑно ÑÑандаÑÑÑ foo должно бÑÑÑ ÑквиваленÑно "FOO", а не "foo". ÐоÑÑÐ¾Ð¼Ñ Ð¿Ñи Ñоздании пеÑеноÑимÑÑ
пÑиложений ÑекомендÑеÑÑÑ Ð»Ð¸Ð±Ð¾ вÑегда заклÑÑаÑÑ Ð¾Ð¿ÑеделÑнное Ð¸Ð¼Ñ Ð² кавÑÑки, либо не заклÑÑаÑÑ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð°.)
ÐÑÑ Ð¾Ð´Ð¸Ð½ ваÑÐ¸Ð°Ð½Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов в кавÑÑкаÑ
позволÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Unicode по иÑ
кодам. Такой иденÑиÑикаÑÐ¾Ñ Ð½Ð°ÑинаеÑÑÑ Ñ U& (ÑÑÑоÑÐ½Ð°Ñ Ð¸Ð»Ð¸ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ U и ампеÑÑанд), а заÑем ÑÑÐ°Ð·Ñ Ð±ÐµÐ· пÑобелов идÑÑ Ð´Ð²Ð¾Ð¹Ð½Ð°Ñ ÐºÐ°Ð²ÑÑка, напÑÐ¸Ð¼ÐµÑ U&"foo". (ÐамеÑÑÑе, ÑÑо пÑи ÑÑом Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑноÑÑÑ Ñ Ð¾Ð¿ÐµÑаÑоÑом &. ЧÑÐ¾Ð±Ñ ÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ, окÑÑжайÑе ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð¿Ñобелами.) ÐаÑем в кавÑÑкаÑ
можно запиÑÑваÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Unicode двÑÐ¼Ñ ÑпоÑобами: обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа, а за ней код Ñимвола из ÑеÑÑÑÑÑ
ÑеÑÑнадÑаÑеÑиÑнÑÑ
ÑиÑÑ, либо обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа, знак плÑÑ, а заÑем код из ÑеÑÑи ÑеÑÑнадÑаÑеÑиÑнÑÑ
ÑиÑÑ. ÐапÑимеÑ, иденÑиÑикаÑÐ¾Ñ "data" можно запиÑаÑÑ Ñак:
U&"d\0061t\+000061"
Ð ÑледÑÑÑем менее ÑÑивиалÑном пÑимеÑе закодиÑовано ÑÑÑÑкое Ñлово «Ñлон», запиÑанное киÑиллиÑей:
U&"\0441\043B\043E\043D"
ÐÑли Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ Ð½Ðµ обÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ, а дÑÑгой ÑпеÑÑимвол, его можно ÑказаÑÑ, добавив UESCAPE поÑле ÑÑÑоки, напÑимеÑ:
U&"d!0061t!+000061" UESCAPE '!'
РкаÑеÑÑве ÑпеÑÑимвола можно вÑбÑаÑÑ Ð»Ñбой Ñимвол, кÑоме ÑеÑÑнадÑаÑеÑиÑной ÑиÑÑÑ, знака плÑÑ, апоÑÑÑоÑа, кавÑÑки или пÑобелÑного Ñимвола. ÐамеÑÑÑе, ÑÑо ÑпеÑÑимвол заклÑÑаеÑÑÑ Ð½Ðµ в двойнÑе кавÑÑки, а в апоÑÑÑоÑÑ, поÑле UESCAPE.
ЧÑÐ¾Ð±Ñ ÑделаÑÑ ÑпеÑÑимволом знак апоÑÑÑоÑа, напиÑиÑе его дваждÑ.
ÐапиÑÑваÑÑ ÑÑÑÑогаÑнÑе паÑÑ UTF-16 и Ñаким обÑазом ÑоÑÑавлÑÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ñ ÐºÐ¾Ð´Ð°Ð¼Ð¸ болÑÑе Ñем U+FFFF можно либо в ÑеÑÑÑÑÑ -, либо в ÑеÑÑизнаÑной ÑоÑме, Ñ Ð¾ÑÑ Ð½Ð°Ð»Ð¸Ñие ÑеÑÑизнаÑной ÑоÑÐ¼Ñ ÑÐµÑ Ð½Ð¸ÑеÑки Ð´ÐµÐ»Ð°ÐµÑ ÑÑо ненÑжнÑм. (СÑÑÑогаÑнÑе паÑÑ Ð½Ðµ ÑÐ¾Ñ ÑанÑÑÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно, а обÑединÑÑÑÑÑ Ð² один Ñимвол, коÑоÑÑй заÑем кодиÑÑеÑÑÑ Ð² UTF-8.)
Ðогда кодиÑовка ÑеÑвеÑа â не UTF-8, Ñимвол Ñ ÐºÐ¾Ð´Ð¾Ð¼, ÑказаннÑм ÑÑой ÑпеÑпоÑледоваÑелÑноÑÑÑÑ, пÑеобÑазÑеÑÑÑ Ð² ÑакÑиÑеÑкÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ ÑеÑвеÑа; еÑли Ñакое пÑеобÑазование невозможно, вÑдаÑÑÑÑ Ð¾Ñибка.
4.1.2. ÐонÑÑанÑÑ #
Ð Postgres Pro еÑÑÑ ÑÑи Ñипа конÑÑÐ°Ð½Ñ Ð¿Ð¾Ð´ÑазÑмеваемÑÑ Ñипов: ÑÑÑоки, биÑовÑе ÑÑÑоки и ÑиÑла. ÐонÑÑанÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ Ñакже запиÑÑваÑÑ, ÑказÑÐ²Ð°Ñ ÑÐ¸Ð¿Ñ Ñвно, ÑÑо позволÑÐµÑ Ð¿ÑедÑÑавиÑÑ Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ ÑоÑно и обÑабоÑаÑÑ Ð±Ð¾Ð»ÐµÐµ ÑÑÑекÑивно. ÐÑи ваÑианÑÑ ÑаÑÑмаÑÑиваÑÑÑÑ Ð² ÑледÑÑÑÐ¸Ñ Ð¿Ð¾Ð´ÑÐ°Ð·Ð´ÐµÐ»Ð°Ñ .
4.1.2.1. СÑÑоковÑе конÑÑанÑÑ #
СÑÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð½ÑÑанÑа в SQL â ÑÑо обÑÑÐ½Ð°Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ Ñимволов, заклÑÑÑÐ½Ð½Ð°Ñ Ð² апоÑÑÑоÑÑ ('), напÑимеÑ: 'ÐÑо ÑÑÑока'. ЧÑÐ¾Ð±Ñ Ð²ÐºÐ»ÑÑиÑÑ Ð°Ð¿Ð¾ÑÑÑÐ¾Ñ Ð² ÑÑÑокÑ, напиÑиÑе в ней два апоÑÑÑоÑа ÑÑдом, напÑимеÑ: 'Ðанна д''ÐÑк'. ÐамеÑÑÑе, ÑÑо не Ñо же Ñамое, ÑÑо Ð´Ð²Ð¾Ð¹Ð½Ð°Ñ ÐºÐ°Ð²ÑÑка (").
Ðве ÑÑÑоковÑе конÑÑанÑÑ, ÑазделÑннÑе пÑобелÑнÑми Ñимволами и минимÑм одним пеÑеводом ÑÑÑоки, обÑединÑÑÑÑÑ Ð² Ð¾Ð´Ð½Ñ Ð¸ обÑабаÑÑваÑÑÑÑ, как еÑли Ð±Ñ ÑÑÑока бÑла запиÑана в одной конÑÑанÑе. ÐапÑимеÑ:
SELECT 'foo' 'bar';
ÑквиваленÑно:
SELECT 'foobar';
но ÑÑа запиÑÑ:
SELECT 'foo' 'bar';
ÑÑиÑаеÑÑÑ ÑинÑакÑиÑеÑкой оÑибкой. (ÐÑо неÑколÑко ÑÑÑанное поведение опÑеделено в ÑÑандаÑÑе SQL, Postgres Pro пÑоÑÑо ÑледÑÐµÑ ÐµÐ¼Ñ.)
4.1.2.2. СÑÑоковÑе конÑÑанÑÑ Ñо ÑпеÑпоÑледоваÑелÑноÑÑÑми в ÑÑиле C #
Postgres Pro Ñакже пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Â«ÑпеÑпоÑледоваÑелÑноÑÑи», ÑÑо ÑвлÑеÑÑÑ ÑаÑÑиÑением ÑÑандаÑÑа SQL. СÑÑока Ñо ÑпеÑпоÑледоваÑелÑноÑÑÑми наÑинаеÑÑÑ Ñ Ð±ÑÐºÐ²Ñ E (заглавной или ÑÑÑоÑной), ÑÑоÑÑей непоÑÑедÑÑвенно пеÑед апоÑÑÑоÑом, напÑимеÑ: E'foo'. (Ðогда конÑÑанÑа Ñо ÑпеÑпоÑледоваÑелÑноÑÑÑÑ ÑазбиваеÑÑÑ Ð½Ð° неÑколÑко ÑÑÑок, бÑÐºÐ²Ñ E нÑжно поÑÑавиÑÑ ÑолÑко пеÑед пеÑвÑм оÑкÑÑваÑÑим апоÑÑÑоÑом.) ÐнÑÑÑи ÑакиÑ
ÑÑÑок Ñимвол обÑаÑной коÑой ÑеÑÑÑ (\) наÑÐ¸Ð½Ð°ÐµÑ C-подобнÑе ÑпеÑпоÑледоваÑелÑноÑÑи, в коÑоÑÑÑ
ÑоÑеÑание обÑаÑной коÑой ÑеÑÑÑ Ñо ÑледÑÑÑим Ñимволом(ами) даÑÑ Ð¾Ð¿ÑеделÑнное байÑовое знаÑение, как показано в ТаблиÑе 4.1.
ТаблиÑа 4.1. СпеÑпоÑледоваÑелÑноÑÑи
| СпеÑпоÑледоваÑелÑноÑÑÑ | ÐнÑеÑпÑеÑаÑÐ¸Ñ |
|---|---|
\b | Ñимвол «забой» |
\f | подаÑа ÑоÑÐ¼Ñ |
\n | Ð½Ð¾Ð²Ð°Ñ ÑÑÑока |
\r | возвÑÐ°Ñ ÐºÐ°ÑеÑки |
\t | ÑабÑлÑÑÐ¸Ñ |
\, \, \ (o = 0â7) | воÑÑмеÑиÑное знаÑение байÑа |
\x, \x (h = 0â9, AâF) | ÑеÑÑнадÑаÑеÑиÑное знаÑение байÑа |
\u, \U (x = 0â9, AâF) | 16- или 32-биÑнÑй ÑеÑÑнадÑаÑеÑиÑнÑй код Ñимвола Unicode |
ÐÑбой дÑÑгой Ñимвол, идÑÑий поÑле обÑаÑной коÑой ÑеÑÑÑ, воÑпÑинимаеÑÑÑ Ð±ÑквалÑно. Таким обÑазом, ÑÑÐ¾Ð±Ñ Ð²ÐºÐ»ÑÑиÑÑ Ð² ÑÑÑÐ¾ÐºÑ Ð¾Ð±ÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ, нÑжно напиÑаÑÑ Ð´Ð²Ðµ коÑÑÑ
ÑеÑÑÑ (\\). Так же можно вклÑÑиÑÑ Ð² ÑÑÑÐ¾ÐºÑ Ð°Ð¿Ð¾ÑÑÑоÑ, напиÑав \', в дополнение к обÑÑÐ½Ð¾Ð¼Ñ ÑпоÑÐ¾Ð±Ñ ''.
ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð·Ð°Ð±Ð¾ÑиÑÑÑÑ, ÑÑÐ¾Ð±Ñ Ð±Ð°Ð¹ÑовÑе поÑледоваÑелÑноÑÑи, коÑоÑÑе Ð²Ñ ÑоздаÑÑе Ñаким обÑазом, оÑобенно в воÑÑмеÑиÑной и ÑеÑÑнадÑаÑеÑиÑной запиÑи, обÑазовÑвали допÑÑÑимÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² ÑеÑвеÑной кодиÑовке. Также Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ иÑполÑзоваÑÑ ÑпеÑпоÑледоваÑелÑноÑÑи Unicode или алÑÑеÑнаÑивнÑÑ Ð·Ð°Ð¿Ð¸ÑÑ, опиÑаннÑÑ Ð² ÐодÑазделе 4.1.2.3; в ÑÑом ÑлÑÑае ÑеÑÐ²ÐµÑ Ð±ÑÐ´ÐµÑ Ð¿ÑовеÑÑÑÑ, возможно ли пÑеобÑазоваÑÑ ÑказаннÑй Ñимвол.
Ðнимание
ÐÑли паÑамеÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии standard_conforming_strings Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение off, Postgres Pro ÑаÑпознаÑÑ Ð¾Ð±ÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ ÐºÐ°Ðº ÑпеÑÑимвол и в обÑÑнÑÑ
ÑÑÑокаÑ
, и в ÑÑÑокаÑ
Ñо ÑпеÑпоÑледоваÑелÑноÑÑÑми. Ðднако в веÑÑии PostgreSQL 9.1 по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑинÑÑо знаÑение on, и в ÑÑом ÑлÑÑае обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа ÑаÑпознаÑÑÑÑ ÑолÑко в ÑпеÑÑÑÑокаÑ
. ÐÑо поведение болÑÑе ÑооÑвеÑÑÑвÑÐµÑ ÑÑандаÑÑÑ, Ñ
оÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°ÑÑÑиÑÑ ÑабоÑÑ Ð¿Ñиложений, ÑаÑÑÑиÑаннÑÑ
на пÑедÑдÑÑий Ñежим, когда обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа ÑаÑпознавалаÑÑ Ð²ÐµÐ·Ð´Ðµ. РкаÑеÑÑве вÑеменного ÑеÑÐµÐ½Ð¸Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе измениÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ð° off, но лÑÑÑе ÑйÑи Ð¾Ñ Ñакой пÑакÑики. ÐÑли вам нÑжно, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа пÑедÑÑавлÑла ÑпеÑиалÑнÑй Ñимвол, задайÑе ÑÑÑоковÑÑ ÐºÐ¾Ð½ÑÑанÑÑ Ñ E.
Рдополнение к standard_conforming_strings поведением обÑаÑной коÑой ÑеÑÑÑ Ð² ÑÑÑоковÑÑ
конÑÑанÑаÑ
ÑпÑавлÑÑÑ Ð¿Ð°ÑамеÑÑÑ escape_string_warning и backslash_quote.
СÑÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð½ÑÑанÑа не Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ñимвол Ñ ÐºÐ¾Ð´Ð¾Ð¼ 0.
4.1.2.3. СÑÑоковÑе конÑÑанÑÑ Ñо ÑпеÑпоÑледоваÑелÑноÑÑÑми Unicode #
Postgres Pro Ñакже поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÐµÑÑ Ð¾Ð´Ð¸Ð½ ваÑÐ¸Ð°Ð½Ñ ÑпеÑпоÑледоваÑелÑноÑÑей, позволÑÑÑий вклÑÑаÑÑ Ð² ÑÑÑоки ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Unicode по иÑ
кодам. СÑÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð½ÑÑанÑа Ñо ÑпеÑпоÑледоваÑелÑноÑÑÑми Unicode наÑинаеÑÑÑ Ñ U& (ÑÑÑоÑÐ½Ð°Ñ Ð¸Ð»Ð¸ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ U и ампеÑÑанд), а заÑем ÑÑÐ°Ð·Ñ Ð±ÐµÐ· пÑобелов идÑÑ Ð°Ð¿Ð¾ÑÑÑоÑ, напÑÐ¸Ð¼ÐµÑ U&'foo'. (ÐамеÑÑÑе, ÑÑо пÑи ÑÑом Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑноÑÑÑ Ñ Ð¾Ð¿ÐµÑаÑоÑом &. ЧÑÐ¾Ð±Ñ ÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ, окÑÑжайÑе ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð¿Ñобелами.) ÐаÑем в апоÑÑÑоÑаÑ
можно запиÑÑваÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Unicode двÑÐ¼Ñ ÑпоÑобами: обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа, а за ней код Ñимвола из ÑеÑÑÑÑÑ
ÑеÑÑнадÑаÑеÑиÑнÑÑ
ÑиÑÑ, либо обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа, знак плÑÑ, а заÑем код из ÑеÑÑи ÑеÑÑнадÑаÑеÑиÑнÑÑ
ÑиÑÑ. ÐапÑимеÑ, ÑÑÑÐ¾ÐºÑ 'data' можно запиÑаÑÑ Ñак:
U&'d\0061t\+000061'
Ð ÑледÑÑÑем менее ÑÑивиалÑном пÑимеÑе закодиÑовано ÑÑÑÑкое Ñлово «Ñлон», запиÑанное киÑиллиÑей:
U&'\0441\043B\043E\043D'
ÐÑли Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ Ð½Ðµ обÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ, а дÑÑгой ÑпеÑÑимвол, его можно ÑказаÑÑ, добавив UESCAPE поÑле ÑÑÑоки, напÑимеÑ:
U&'d!0061t!+000061' UESCAPE '!'
РкаÑеÑÑве ÑпеÑÑимвола можно вÑбÑаÑÑ Ð»Ñбой Ñимвол, кÑоме ÑеÑÑнадÑаÑеÑиÑной ÑиÑÑÑ, знака плÑÑ, апоÑÑÑоÑа, кавÑÑки или пÑобелÑного Ñимвола.
ЧÑÐ¾Ð±Ñ Ð²ÐºÐ»ÑÑиÑÑ ÑпеÑÑимвол в ÑÑÑÐ¾ÐºÑ Ð±ÑквалÑно, напиÑиÑе его дваждÑ.
ÐапиÑÑваÑÑ ÑÑÑÑогаÑнÑе паÑÑ UTF-16 и Ñаким обÑазом ÑоÑÑавлÑÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ñ ÐºÐ¾Ð´Ð°Ð¼Ð¸ болÑÑе Ñем U+FFFF можно либо в ÑеÑÑÑÑÑ -, либо в ÑеÑÑизнаÑной ÑоÑме, Ñ Ð¾ÑÑ Ð½Ð°Ð»Ð¸Ñие ÑеÑÑизнаÑной ÑоÑÐ¼Ñ ÑÐµÑ Ð½Ð¸ÑеÑки Ð´ÐµÐ»Ð°ÐµÑ ÑÑо ненÑжнÑм. (СÑÑÑогаÑнÑе паÑÑ Ð½Ðµ ÑÐ¾Ñ ÑанÑÑÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно, а обÑединÑÑÑÑÑ Ð² один Ñимвол, коÑоÑÑй заÑем кодиÑÑеÑÑÑ Ð² UTF-8.)
Ðогда кодиÑовка ÑеÑвеÑа â не UTF-8, Ñимвол Ñ ÐºÐ¾Ð´Ð¾Ð¼, ÑказаннÑм ÑÑой ÑпеÑпоÑледоваÑелÑноÑÑÑÑ, пÑеобÑазÑеÑÑÑ Ð² ÑакÑиÑеÑкÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ ÑеÑвеÑа; еÑли Ñакое пÑеобÑазование невозможно, вÑдаÑÑÑÑ Ð¾Ñибка.
Также замеÑÑÑе, ÑÑо ÑпеÑпоÑледоваÑелÑноÑÑи Unicode в ÑÑÑоковÑÑ
конÑÑанÑаÑ
ÑабоÑаÑÑ, ÑолÑко когда паÑамеÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии standard_conforming_strings Ñавен on. ÐÑо обÑÑÑнÑеÑÑÑ Ñем, ÑÑо инаÑе клиенÑÑкие пÑогÑаммÑ, пÑовеÑÑÑÑие SQL-опеÑаÑоÑÑ, можно бÑÐ´ÐµÑ Ð²Ð²ÐµÑÑи в заблÑждение и ÑкÑплÑаÑиÑоваÑÑ ÑÑо как ÑÑзвимоÑÑÑ, напÑимеÑ, Ð´Ð»Ñ SQL-инÑекÑий. ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение off, ÑÑи ÑпеÑпоÑледоваÑелÑноÑÑи бÑдÑÑ Ð²ÑзÑваÑÑ Ð¾ÑибкÑ.
4.1.2.4. СÑÑоковÑе конÑÑанÑÑ, заклÑÑÑннÑе в доллаÑÑ #
ХоÑÑ ÑÑандаÑÑнÑй ÑинÑакÑÐ¸Ñ Ð´Ð»Ñ ÑÑÑоковÑÑ
конÑÑÐ°Ð½Ñ Ð¾Ð±ÑÑно доÑÑаÑоÑно Ñдобен, он Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð»Ð¾Ñ
о ÑиÑаÑÑÑÑ, когда ÑÑÑока ÑодеÑÐ¶Ð¸Ñ Ð¼Ð½Ð¾Ð³Ð¾ апоÑÑÑоÑов, Ñак как каждÑй Ñакой Ñимвол пÑиÑ
одиÑÑÑ Ð´ÑблиÑоваÑÑ. ЧÑÐ¾Ð±Ñ Ð¸ в ÑакиÑ
ÑлÑÑаÑÑ
запÑоÑÑ Ð¾ÑÑавалиÑÑ ÑиÑаемÑми, Postgres Pro пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ ÐµÑÑ Ð¾Ð´Ð¸Ð½ ÑпоÑоб запиÑи ÑÑÑоковÑÑ
конÑÑÐ°Ð½Ñ â «заклÑÑение ÑÑÑок в доллаÑÑ». СÑÑÐ¾ÐºÐ¾Ð²Ð°Ñ ÐºÐ¾Ð½ÑÑанÑа, заклÑÑÑÐ½Ð½Ð°Ñ Ð² доллаÑÑ, наÑинаеÑÑÑ Ñо знака доллаÑа ($), необÑзаÑелÑного «Ñега» из неÑколÑкиÑ
Ñимволов и еÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ знака доллаÑа, заÑем ÑодеÑÐ¶Ð¸Ñ Ð¾Ð±ÑÑнÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ Ñимволов, ÑоÑÑавлÑÑÑÑÑ ÑÑÑокÑ, и оканÑиваеÑÑÑ Ð·Ð½Ð°ÐºÐ¾Ð¼ доллаÑа, Ñем же Ñегом и замÑкаÑÑим знаком доллаÑа. ÐапÑимеÑ, ÑÑÑÐ¾ÐºÑ Â«Ðанна д'ÐÑк» можно запиÑаÑÑ Ð² доллаÑаÑ
двÑÐ¼Ñ ÑпоÑобами:
$$Ðанна д'ÐÑк$$ $SomeTag$Ðанна д'ÐÑк$SomeTag$
ÐамеÑÑÑе, ÑÑо внÑÑÑи Ñакой ÑÑÑоки апоÑÑÑоÑÑ Ð½Ðµ нÑжно запиÑÑваÑÑ Ð¾ÑобÑм обÑазом. Ðа Ñамом деле, в ÑÑÑоке, заклÑÑÑнной в доллаÑÑ, вÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¼Ð¾Ð¶Ð½Ð¾ запиÑÑваÑÑ Ð² ÑиÑÑом виде: ÑодеÑжимое ÑÑÑоки вÑегда запиÑÑваеÑÑÑ Ð±ÑквалÑно. Ðи обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа, ни даже знак доллаÑа не ÑвлÑÑÑÑÑ ÑпеÑÑимволами, еÑли ÑолÑко они не обÑазÑÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ, ÑооÑвеÑÑÑвÑÑÑÑÑ Ð¾ÑкÑÑваÑÑÐµÐ¼Ñ ÑегÑ.
СÑÑоковÑе конÑÑанÑÑ Ð² доллаÑÐ°Ñ Ð¼Ð¾Ð¶Ð½Ð¾ вкладÑваÑÑ Ð´ÑÑг в дÑÑга, вÑбиÑÐ°Ñ Ð½Ð° ÑазнÑÑ ÑÑовнÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾ÑÑи ÑазнÑе Ñеги. ЧаÑе вÑего ÑÑо иÑполÑзÑеÑÑÑ Ð¿Ñи напиÑании опÑеделений ÑÑнкÑий. ÐапÑимеÑ:
$function$
BEGIN
RETURN ($1 ~ $q$[\t\r\n\v\\]$q$);
END;
$function$ ÐдеÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ $q$[\t\r\n\v\\]$q$ пÑедÑÑавлÑÐµÑ Ð² доллаÑаÑ
ÑекÑÑовÑÑ ÑÑÑÐ¾ÐºÑ [\t\r\n\v\\], коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¾Ð±ÑабоÑана, когда Postgres Pro бÑÐ´ÐµÑ Ð²ÑполнÑÑÑ ÑÑÑ ÑÑнкÑиÑ. Ðо Ñак как ÑÑа поÑледоваÑелÑноÑÑÑ Ð½Ðµ ÑооÑвеÑÑÑвÑÐµÑ Ð²Ð½ÐµÑÐ½ÐµÐ¼Ñ ÑÐµÐ³Ñ Ð² доллаÑаÑ
($function$), Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑней ÑÑÑоки ÑÑо пÑоÑÑо обÑÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð²Ð½ÑÑÑи конÑÑанÑÑ.
Тег ÑÑÑоки в доллаÑаÑ
, еÑли он пÑиÑÑÑÑÑвÑеÑ, должен ÑооÑвеÑÑÑвоваÑÑ Ð¿Ñавилам, опÑеделÑннÑм Ð´Ð»Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов без кавÑÑек, и к ÑÐ¾Ð¼Ñ Ð¶Ðµ не должен ÑодеÑжаÑÑ Ð·Ð½Ð°Ðº доллаÑа. Теги ÑегиÑÑÑозавиÑимÑ, Ñак ÑÑо $tag$String content$tag$ â пÑавилÑÐ½Ð°Ñ ÑÑÑока, а $TAG$String content$tag$ â неÑ.
СÑÑока в доллаÑÐ°Ñ , ÑледÑÑÑÐ°Ñ Ð·Ð° клÑÑевÑм Ñловом или иденÑиÑикаÑоÑом, должна оÑделÑÑÑÑÑ Ð¾Ñ Ð½ÐµÐ³Ð¾ пÑобелÑнÑми Ñимволами, инаÑе Ð´Ð¾Ð»Ð»Ð°Ñ Ð±ÑÐ´ÐµÑ ÑÑиÑаÑÑÑÑ Ð¿Ñодолжением пÑедÑдÑÑего иденÑиÑикаÑоÑа.
ÐаклÑÑение ÑÑÑок в доллаÑÑ Ð½Ðµ ÑвлÑеÑÑÑ ÑаÑÑÑÑ ÑÑандаÑÑа SQL, но ÑаÑÑо ÑÑо более ÑдобнÑй ÑпоÑоб запиÑÑваÑÑ ÑложнÑе ÑÑÑоки, Ñем ÑÑандаÑÑнÑй ваÑÐ¸Ð°Ð½Ñ Ñ Ð°Ð¿Ð¾ÑÑÑоÑами. Ðн оÑобенно полезен, когда нÑжно пÑедÑÑавиÑÑ ÑÑÑоковÑÑ ÐºÐ¾Ð½ÑÑанÑÑ Ð²Ð½ÑÑÑи дÑÑгой ÑÑÑоки, ÑÑо ÑаÑÑо ÑÑебÑеÑÑÑ Ð² опÑеделениÑÑ Ð¿ÑоÑедÑÑнÑÑ ÑÑнкÑий. ÐгÑаниÑивÑиÑÑ ÑолÑко апоÑÑÑоÑами, каждÑÑ Ð¾Ð±ÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ Ð² пÑиведÑнном пÑимеÑе пÑиÑлоÑÑ Ð±Ñ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ ÑеÑÑÑÑÐ¼Ñ Ñакими Ñимволами, коÑоÑÑе Ð±Ñ Ð·Ð°Ñем ÑменÑÑилиÑÑ Ð´Ð¾ двÑÑ Ð¿Ñи ÑазбоÑе внеÑней ÑÑÑоки, и Ð½Ð°ÐºÐ¾Ð½ÐµÑ Ð´Ð¾ одного пÑи обÑабоÑке внÑÑÑенней ÑÑÑоки во вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑнкÑии.
4.1.2.5. ÐиÑовÑе ÑÑÑоковÑе конÑÑанÑÑ #
ÐиÑовÑе ÑÑÑоковÑе конÑÑанÑÑ Ð¿Ð¾Ñ
ожи на обÑÑнÑе Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной бÑквой B (заглавной или ÑÑÑоÑной), добавленной непоÑÑедÑÑвенно пеÑед оÑкÑÑваÑÑим апоÑÑÑоÑом (без пÑомежÑÑоÑнÑÑ
пÑобелов), напÑимеÑ: B'1001'. РбиÑовÑÑ
ÑÑÑоковÑÑ
конÑÑанÑаÑ
допÑÑкаÑÑÑÑ Ð»Ð¸ÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ 0 и 1.
ÐиÑовÑе конÑÑанÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð·Ð°Ð¿Ð¸ÑÐ°Ð½Ñ Ð¸ по-дÑÑгомÑ, в ÑеÑÑнадÑаÑеÑиÑном виде, Ñ Ð½Ð°ÑалÑной бÑквой X (заглавной или ÑÑÑоÑной), напÑимеÑ: X'1FF'. Ð¢Ð°ÐºÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ ÑквиваленÑна двоиÑной, ÑолÑко ÑеÑÑÑе двоиÑнÑÑ
ÑиÑÑÑ Ð·Ð°Ð¼ÐµÐ½ÑÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð¹ ÑеÑÑнадÑаÑеÑиÑной.
Ðбе ÑоÑÐ¼Ñ Ð·Ð°Ð¿Ð¸Ñи допÑÑкаÑÑ Ð¿ÐµÑÐµÐ½Ð¾Ñ ÑÑÑок Ñак же, как и обÑÑнÑе ÑÑÑоковÑе конÑÑанÑÑ. Ðднако заклÑÑаÑÑ Ð² доллаÑÑ Ð±Ð¸ÑовÑе ÑÑÑоки нелÑзÑ.
4.1.2.6. ЧиÑловÑе конÑÑанÑÑ #
ЧиÑловÑе конÑÑанÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð·Ð°Ð´Ð°Ð½Ñ Ð² ÑледÑÑÑем обÑем виде:
ÑиÑÑÑÑиÑÑÑ.[ÑиÑÑÑ][e[+-]ÑиÑÑÑ] [ÑиÑÑÑ].ÑиÑÑÑ[e[+-]ÑиÑÑÑ]ÑиÑÑÑe[+-]ÑиÑÑÑ
где ÑиÑÑÑ â ÑÑо одна или неÑколÑко деÑÑÑиÑнÑÑ
ÑиÑÑ (0..9). Ðо или поÑле деÑÑÑиÑной ÑоÑки (пÑи ÐµÑ Ð½Ð°Ð»Ð¸Ñии) должна бÑÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ñм одна ÑиÑÑа. Ðак минимÑм одна ÑиÑÑа должна ÑледоваÑÑ Ð·Ð° обознаÑением ÑкÑпоненÑÑ (e), еÑли оно пÑиÑÑÑÑÑвÑеÑ. Ð ÑиÑловой конÑÑанÑе не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ñобелов или дÑÑгиÑ
Ñимволов, за иÑклÑÑением Ñимволов подÑÑÑкиваниÑ, коÑоÑÑе могÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð²Ð¸Ð·ÑалÑной гÑÑппиÑовки, как опиÑано ниже. ÐбÑаÑиÑе внимание на Ñо, ÑÑо лÑбой знак минÑÑ Ð¸Ð»Ð¸ плÑÑ Ð² наÑале ÑÑÑоки не ÑÑиÑаеÑÑÑ ÑаÑÑÑÑ ÑиÑла â ÑÑо опеÑаÑоÑ, пÑименÑннÑй к конÑÑанÑе.
ÐеÑколÑко пÑимеÑов допÑÑÑимÑÑ ÑиÑловÑÑ ÐºÐ¾Ð½ÑÑанÑ:
42
3.5
4.
.001
5e2
1.925e-3
ÐÑоме Ñого, недеÑÑÑиÑнÑе ÑелоÑиÑленнÑе конÑÑанÑÑ Ð¿ÑинимаÑÑÑÑ Ð² ÑледÑÑÑÐ¸Ñ ÑоÑÐ¼Ð°Ñ :
0xhexdigits0ooctdigits0bbindigits
где hexdigits â одна или более ÑеÑÑнадÑаÑеÑиÑнÑÑ
ÑиÑÑ (0-9, A-F), octdigits â одна или более воÑÑмеÑиÑнÑÑ
ÑиÑÑ (0-7) и bindigits â одна или более двоиÑнÑÑ
ÑиÑÑ (0 или 1). ШеÑÑнадÑаÑеÑиÑнÑе ÑиÑÑÑ Ð¸ пÑеÑикÑÑ Ð¼Ð¾Ð³ÑÑ ÑказÑваÑÑÑÑ Ð² веÑÑ
нем или нижнем ÑегиÑÑÑе. ÐбÑаÑиÑе внимание на Ñо, ÑÑо недеÑÑÑиÑнÑе ÑоÑÐ¼Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑинимаÑÑ Ð½Ðµ ÑиÑла Ñ Ð´Ñобной ÑаÑÑÑÑ, а ÑолÑко ÑелÑе ÑиÑла.
ÐеÑколÑко пÑимеÑов допÑÑÑимÑÑ Ð½ÐµÐ´ÐµÑÑÑиÑнÑÑ ÑелоÑиÑленнÑÑ ÐºÐ¾Ð½ÑÑанÑ:
0b100101
0B10011001
0o273
0O755
0x42f
0XFFFF
ÐÐ»Ñ Ð²Ð¸Ð·ÑалÑной гÑÑппиÑовки Ð¼ÐµÐ¶Ð´Ñ ÑиÑÑами можно вÑÑавлÑÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿Ð¾Ð´ÑÑÑкиваниÑ. Ðни не влиÑÑÑ Ð½Ð° знаÑение конÑÑанÑÑ. ÐапÑимеÑ:
1_500_000_000
0b10001000_00000000
0o_1_755
0xFFFF_FFFF
1.618_034
ÐапÑеÑаеÑÑÑ ÑказÑваÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿Ð¾Ð´ÑÑÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð² наÑале или в конÑе ÑиÑловой конÑÑанÑÑ Ð¸Ð»Ð¸ гÑÑÐ¿Ð¿Ñ ÑиÑÑ (Ñо еÑÑÑ ÑÑÐ°Ð·Ñ Ð¿ÐµÑед или поÑле деÑÑÑиÑной ÑоÑки или обознаÑÐµÐ½Ð¸Ñ ÑкÑпоненÑÑ), а Ñакже более одного Ñимвола подÑÑÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑÑд.
ЧиÑÐ»Ð¾Ð²Ð°Ñ ÐºÐ¾Ð½ÑÑанÑа, не ÑодеÑжаÑÐ°Ñ ÑоÑки и ÑкÑпоненÑÑ, изнаÑалÑно ÑаÑÑмаÑÑиваеÑÑÑ ÐºÐ°Ðº конÑÑанÑа Ñипа integer, еÑли ÐµÑ Ð·Ð½Ð°Ñение ÑмеÑаеÑÑÑ Ð² 32-биÑнÑй Ñип integer; заÑем как конÑÑанÑа Ñипа bigint, еÑли ÐµÑ Ð·Ð½Ð°Ñение ÑмеÑаеÑÑÑ Ð² 64-биÑнÑй bigint; в пÑоÑивном ÑлÑÑае она пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ñип numeric. ÐонÑÑанÑÑ, ÑодеÑжаÑие деÑÑÑиÑнÑе ÑоÑки и/или ÑкÑпоненÑÑ, вÑегда ÑÑиÑаÑÑÑÑ ÐºÐ¾Ð½ÑÑанÑами Ñипа numeric.
ÐзнаÑалÑно назнаÑеннÑй Ñип даннÑÑ
ÑиÑловой конÑÑанÑÑ ÑÑо ÑолÑко оÑпÑÐ°Ð²Ð½Ð°Ñ ÑоÑка Ð´Ð»Ñ Ð°Ð»Ð³Ð¾ÑиÑмов опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñипа. РболÑÑинÑÑве ÑлÑÑаев конÑÑанÑа бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки пÑиведена к наиболее подÑ
одÑÑÐµÐ¼Ñ ÑÐ¸Ð¿Ñ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ конÑекÑÑа. ÐÑи необÑ
одимоÑÑи Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑинÑдиÑелÑно инÑеÑпÑеÑиÑоваÑÑ ÑиÑловое знаÑение как знаÑение опÑеделÑнного Ñипа, пÑÐ¸Ð²ÐµÐ´Ñ ÐµÐ³Ð¾ Ñип к нÑжномÑ. ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑделаÑÑ, ÑÑÐ¾Ð±Ñ ÑиÑловое знаÑение ÑаÑÑмаÑÑивалоÑÑ ÐºÐ°Ðº имеÑÑее Ñип real (float4), напиÑав:
REAL '1.23' -- ÑÑÑоковÑй ÑÑÐ¸Ð»Ñ 1.23::REAL -- ÑÑÐ¸Ð»Ñ Postgres Pro (иÑÑоÑиÑеÑкий)
Ðа Ñамом деле ÑÑо ÑолÑко ÑаÑÑнÑе ÑлÑÑаи ÑинÑакÑиÑа пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñипов, коÑоÑÑй бÑÐ´ÐµÑ ÑаÑÑмаÑÑиваÑÑÑÑ Ð´Ð°Ð»ÐµÐµ.
4.1.2.7. ÐонÑÑанÑÑ Ð´ÑÑÐ³Ð¸Ñ Ñипов #
ÐонÑÑанÑÑ Ð¾Ð±ÑÑного Ñипа можно ввеÑÑи одним из ÑледÑÑÑÐ¸Ñ ÑпоÑобов:
type'string' 'string'::typeCAST ( 'string' AStype)
ТекÑÑ ÑÑÑоковой конÑÑанÑÑ Ð¿ÐµÑедаÑÑÑÑ Ð¿ÑоÑедÑÑе пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð²Ð¾Ð´Ð° Ð´Ð»Ñ Ñипа, обознаÑенного здеÑÑ type. РезÑлÑÑаÑом ÑÑановиÑÑÑ ÐºÐ¾Ð½ÑÑанÑа Ñказанного Ñипа. Явное пÑиведение Ñипа можно опÑÑÑиÑÑ, еÑли нÑжнÑй Ñип конÑÑанÑÑ Ð¾Ð¿ÑеделÑеÑÑÑ Ð¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñно (напÑимеÑ, когда она пÑиÑваиваеÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно ÑÑолбÑÑ ÑаблиÑÑ), Ñак как в ÑÑом ÑлÑÑае пÑиведение пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð°Ð²ÑомаÑиÑеÑки.
СÑÑоковÑÑ ÐºÐ¾Ð½ÑÑанÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ запиÑаÑÑ, иÑполÑзÑÑ ÐºÐ°Ðº обÑÑнÑй ÑинÑакÑÐ¸Ñ SQL, Ñак и ÑоÑÐ¼Ð°Ñ Ñ Ð´Ð¾Ð»Ð»Ð°Ñами.
Также можно запиÑаÑÑ Ð¿Ñиведение Ñипов, иÑполÑзÑÑ ÑинÑакÑÐ¸Ñ ÑÑнкÑий:
typename( 'string' )
но ÑÑо ÑабоÑÐ°ÐµÑ Ð½Ðµ Ð´Ð»Ñ Ð²ÑÐµÑ Ð¸Ð¼Ñн Ñипов; подÑобнее об ÑÑом напиÑано в ÐодÑазделе 4.2.9.
ÐонÑÑÑÑкÑÐ¸Ñ ::, CAST() и ÑинÑакÑÐ¸Ñ Ð²Ñзова ÑÑнкÑии можно Ñакже иÑполÑзоваÑÑ Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñипов обÑÑнÑÑ
вÑÑажений во вÑÐµÐ¼Ñ Ð²ÑполнениÑ, как опиÑано в ÐодÑазделе 4.2.9. Ðо избежание ÑинÑакÑиÑеÑкой неопÑеделÑнноÑÑи, запиÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ ÑолÑко Ð´Ð»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ñипа пÑоÑÑой ÑекÑÑовой конÑÑанÑÑ. ÐÑÑ Ð¾Ð´Ð½Ð¾ огÑаниÑение запиÑи Ñип 'ÑÑÑока': она не ÑабоÑÐ°ÐµÑ Ð´Ð»Ñ Ð¼Ð°ÑÑивов; Ð´Ð»Ñ ÑакиÑ
конÑÑÐ°Ð½Ñ ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ Ñип 'ÑÑÑока':: или CAST().
СинÑакÑÐ¸Ñ CAST() ÑооÑвеÑÑÑвÑÐµÑ SQL, а запиÑÑ ÑвлÑеÑÑÑ Ð¾Ð±Ð¾Ð±Ñением ÑÑандаÑÑа: в SQL Ñакой ÑинÑакÑÐ¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑолÑко некоÑоÑÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
, но Postgres Pro позволÑÐµÑ Ð¸ÑполÑзоваÑÑ ÐµÐ³Ð¾ Ð´Ð»Ñ Ð²ÑеÑ
. СинÑакÑÐ¸Ñ Ñ type 'string':: Ð¸Ð¼ÐµÐµÑ Ð¸ÑÑоÑиÑеÑкие коÑни в Postgres Pro, как и запиÑÑ Ð² виде вÑзова ÑÑнкÑии.
4.1.3. ÐпеÑаÑоÑÑ #
ÐÐ¼Ñ Ð¾Ð¿ÐµÑаÑоÑа обÑазÑÐµÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ Ð½Ðµ более Ñем NAMEDATALEN-1 (по ÑмолÑÐ°Ð½Ð¸Ñ 63) Ñимволов из ÑледÑÑÑего ÑпиÑка:
+ - * / < > = ~ ! @ # % ^ & | ` ?
Ðднако Ð´Ð»Ñ Ð¸Ð¼Ñн опеÑаÑоÑов еÑÑÑ ÐµÑÑ Ð½ÐµÑколÑко огÑаниÑений:
СоÑеÑÐ°Ð½Ð¸Ñ Ñимволов
--и/*не могÑÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð² имени опеÑаÑоÑа, Ñак как они бÑдÑÑ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑаÑÑ Ð½Ð°Ñало комменÑаÑиÑ.ÐногоÑимволÑное Ð¸Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑа не Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°ÐºÐ°Ð½ÑиваÑÑÑÑ Ð·Ð½Ð°ÐºÐ¾Ð¼
+или-, еÑли ÑолÑко оно не ÑодеÑÐ¶Ð¸Ñ Ñакже один из ÑÑÐ¸Ñ Ñимволов:
~ ! @ # % ^ & | ` ?ÐапÑимеÑ,
@-â допÑÑÑимое Ð¸Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑа, а*-â неÑ. ÐлагодаÑÑ ÑÑÐ¾Ð¼Ñ Ð¾Ð³ÑаниÑениÑ, Postgres Pro Ð¼Ð¾Ð¶ÐµÑ ÑазбиÑаÑÑ ÐºÐ¾ÑÑекÑнÑе SQL-запÑоÑÑ Ð±ÐµÐ· пÑобелов Ð¼ÐµÐ¶Ð´Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñами.
ÐапиÑÑÐ²Ð°Ñ Ð½ÐµÑÑандаÑÑнÑе SQL-опеÑаÑоÑÑ, обÑÑно нÑжно оÑделÑÑÑ Ð¸Ð¼ÐµÐ½Ð° ÑоÑедниÑ
опеÑаÑоÑов пÑобелами Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑноÑÑи. ÐапÑимеÑ, еÑли Ð²Ñ Ð¾Ð¿Ñеделили пÑеÑикÑнÑй опеÑаÑÐ¾Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ @, Ð²Ñ Ð½Ðµ можеÑе напиÑаÑÑ X*@Y, а Ð´Ð¾Ð»Ð¶Ð½Ñ Ð½Ð°Ð¿Ð¸ÑаÑÑ X* @Y, ÑÑÐ¾Ð±Ñ Postgres Pro однознаÑно пÑоÑиÑал ÑÑо как два опеÑаÑоÑа, а не один.
4.1.4. СпеÑиалÑнÑе знаки #
ÐекоÑоÑÑе не алÑавиÑно-ÑиÑÑовÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¸Ð¼ÐµÑÑ ÑпеÑиалÑное знаÑение, но пÑи ÑÑом не ÑвлÑÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑами. ÐодÑобнее Ð¸Ñ Ð¸ÑполÑзование бÑÐ´ÐµÑ ÑаÑÑмоÑÑено пÑи опиÑании ÑооÑвеÑÑÑвÑÑÑего ÑлеменÑа ÑинÑакÑиÑа. ÐдеÑÑ Ð¾Ð½Ð¸ ÑпоминаÑÑÑÑ ÑолÑко Ð´Ð»Ñ ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸ обобÑÐµÐ½Ð¸Ñ Ð¸Ñ Ð¿ÑедназнаÑениÑ.
Ðнак доллаÑа (
$), пÑедваÑÑÑÑий ÑиÑло, иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð·Ð¸Ñионного паÑамеÑÑа в Ñеле опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑнкÑии или подгоÑовленного опеÑаÑоÑа. РдÑÑÐ³Ð¸Ñ ÐºÐ¾Ð½ÑекÑÑÐ°Ñ Ð·Ð½Ð°Ðº доллаÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑаÑÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑа или ÑÑÑоковой конÑÑанÑÑ, заклÑÑÑнной в доллаÑÑ.ÐÑÑглÑе Ñкобки (
()) имеÑÑ Ð¾Ð±ÑÑное знаÑение и пÑименÑÑÑÑÑ Ð´Ð»Ñ Ð³ÑÑппиÑовки вÑÑажений и повÑÑÐµÐ½Ð¸Ñ Ð¿ÑиоÑиÑеÑа опеÑаÑий. РнекоÑоÑÑÑ ÑлÑÑаÑÑ Ñкобки â ÑÑо Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð°Ñ ÑаÑÑÑ ÑинÑакÑиÑа опÑеделÑннÑÑ SQL-команд.ÐвадÑаÑнÑе Ñкобки (
[]) пÑименÑÑÑÑÑ Ð´Ð»Ñ Ð²ÑÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑлеменÑов маÑÑива. ÐодÑобнее маÑÑÐ¸Ð²Ñ ÑаÑÑмаÑÑиваÑÑÑÑ Ð² Разделе 8.15.ÐапÑÑÑе (
,) иÑполÑзÑÑÑÑÑ Ð² некоÑоÑÑÑ ÑинÑакÑиÑеÑÐºÐ¸Ñ ÐºÐ¾Ð½ÑÑÑÑкÑиÑÑ Ð´Ð»Ñ ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ ÑлеменÑов ÑпиÑка.ТоÑка Ñ Ð·Ð°Ð¿ÑÑой (
;) завеÑÑÐ°ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SQL. Ðна не Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð½Ð¸Ð³Ð´Ðµ внÑÑÑи командÑ, за иÑклÑÑением ÑÑÑоковÑÑ ÐºÐ¾Ð½ÑÑÐ°Ð½Ñ Ð¸Ð»Ð¸ иденÑиÑикаÑоÑов в кавÑÑÐºÐ°Ñ .ÐвоеÑоÑие (
:) пÑименÑеÑÑÑ Ð´Ð»Ñ Ð²ÑбоÑки «ÑÑезов» маÑÑивов (Ñм. Раздел 8.15.) РнекоÑоÑÑÑ Ð´Ð¸Ð°Ð»ÐµÐºÑÐ°Ñ SQL (напÑимеÑ, в Embedded SQL) двоеÑоÑие Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑеÑикÑом в имени пеÑеменной.ÐвÑздоÑка (
*) иÑполÑзÑеÑÑÑ Ð² некоÑоÑÑÑ ÐºÐ¾Ð½ÑекÑÑÐ°Ñ ÐºÐ°Ðº обознаÑение вÑÐµÑ Ð¿Ð¾Ð»ÐµÐ¹ ÑÑÑоки или ÑоÑÑавного знаÑениÑ. Ðна Ñакже Ð¸Ð¼ÐµÐµÑ ÑпеÑиалÑное знаÑение, когда иÑполÑзÑеÑÑÑ ÐºÐ°Ðº аÑгÑÐ¼ÐµÐ½Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð°Ð³ÑегаÑнÑÑ ÑÑнкÑий, а именно ÑÑнкÑий, коÑоÑÑм не нÑÐ¶Ð½Ñ ÑвнÑе паÑамеÑÑÑ.ТоÑка (
.) иÑполÑзÑеÑÑÑ Ð² ÑиÑловÑÑ ÐºÐ¾Ð½ÑÑанÑÐ°Ñ , а Ñакже Ð´Ð»Ñ Ð¾ÑÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸Ð¼Ñн ÑÑ ÐµÐ¼Ñ, ÑаблиÑÑ Ð¸ ÑÑолбÑа.
4.1.5. ÐомменÑаÑии #
ÐомменÑаÑий â ÑÑо поÑледоваÑелÑноÑÑÑ Ñимволов, коÑоÑÐ°Ñ Ð½Ð°ÑинаеÑÑÑ Ñ Ð´Ð²ÑÑ Ð¼Ð¸Ð½ÑÑов и пÑодолжаеÑÑÑ Ð´Ð¾ конÑа ÑÑÑоки, напÑимеÑ:
-- ÐÑо ÑÑандаÑÑнÑй комменÑаÑий SQL
ÐÑоме ÑÑого, блоÑнÑе комменÑаÑии можно запиÑÑваÑÑ Ð² ÑÑиле C:
/* многоÑÑÑоÑнÑй комменÑаÑий * Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ð¾ÑÑÑÑ: /* вложеннÑй блок комменÑаÑÐ¸Ñ */ */
где комменÑаÑий наÑинаеÑÑÑ Ñ /* и пÑодолжаеÑÑÑ Ð´Ð¾ ÑооÑвеÑÑÑвÑÑÑего вÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ */. ÐлоÑнÑе комменÑаÑии можно вкладÑваÑÑ Ð´ÑÑг в дÑÑга, как ÑазÑеÑено по ÑÑандаÑÑÑ SQL (но не ÑазÑеÑено в C), Ñак ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе комменÑиÑоваÑÑ Ð±Ð¾Ð»ÑÑие блоки кода, коÑоÑÑе пÑи ÑÑом Ñже могÑÑ ÑодеÑжаÑÑ Ð±Ð»Ð¾ÐºÐ¸ комменÑаÑиев.
ÐомменÑаÑий ÑдалÑеÑÑÑ Ð¸Ð· Ð²Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ поÑока в наÑале ÑинÑакÑиÑеÑкого анализа и ÑакÑиÑеÑки заменÑеÑÑÑ Ð¿Ñобелом.
4.1.6. ÐÑиоÑиÑеÑÑ Ð¾Ð¿ÐµÑаÑоÑов #
РТаблиÑе 4.2 Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð¿ÑиоÑиÑеÑÑ Ð¸ оÑеÑÑдноÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов, дейÑÑвÑÑÑие в Postgres Pro. ÐолÑÑинÑÑво опеÑаÑоÑов имеÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñй пÑиоÑиÑÐµÑ Ð¸ вÑÑиÑлÑÑÑÑÑ Ñлева напÑаво. ÐÑиоÑиÑÐµÑ Ð¸ оÑеÑÑдноÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов жÑÑÑко ÑикÑиÑÐ¾Ð²Ð°Ð½Ñ Ð² ÑинÑакÑиÑеÑком анализаÑоÑе. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе, ÑÑÐ¾Ð±Ñ Ð²ÑÑажение Ñ Ð½ÐµÑколÑкими опеÑаÑоÑами ÑазбиÑалоÑÑ Ð½Ðµ в Ñом поÑÑдке, коÑоÑÑй дикÑÑÑÑ ÑÑи пÑиоÑиÑеÑÑ, добавÑÑе Ñкобки.
ТаблиÑа 4.2. ÐÑиоÑиÑÐµÑ Ð¾Ð¿ÐµÑаÑоÑов (Ð¾Ñ Ð±Ð¾Ð»ÑÑего к менÑÑемÑ)
| ÐпеÑаÑоÑ/ÑÐ»ÐµÐ¼ÐµÐ½Ñ | ÐÑеÑÑдноÑÑÑ | ÐпиÑание |
|---|---|---|
. | Ñлева-напÑаво | ÑазделиÑÐµÐ»Ñ Ð¸Ð¼Ñн ÑаблиÑÑ Ð¸ ÑÑолбÑа |
:: | Ñлева-напÑаво | пÑиведение Ñипов в ÑÑиле Postgres Pro |
[ ] | Ñлева-напÑаво | вÑÐ±Ð¾Ñ ÑлеменÑа маÑÑива |
+ - | ÑпÑава-налево | ÑнаÑнÑй плÑÑ, ÑнаÑнÑй минÑÑ |
COLLATE | Ñлева-напÑаво | вÑÐ±Ð¾Ñ Ð¿Ñавила ÑоÑÑиÑовки |
AT | Ñлева-напÑаво | AT TIME ZONE |
^ | Ñлева-напÑаво | возведение в ÑÑÐµÐ¿ÐµÐ½Ñ |
* / % | Ñлева-напÑаво | Ñмножение, деление, оÑÑаÑок Ð¾Ñ Ð´ÐµÐ»ÐµÐ½Ð¸Ñ |
+ - | Ñлева-напÑаво | Ñложение, вÑÑиÑание |
| (лÑбой дÑÑгой опеÑаÑоÑ) | Ñлева-напÑаво | вÑе дÑÑгие вÑÑÑоеннÑе и полÑзоваÑелÑÑкие опеÑаÑоÑÑ |
BETWEEN IN LIKE ILIKE SIMILAR |  | пÑовеÑка диапазона, пÑовеÑка ÑленÑÑва, ÑÑавнение ÑÑÑок |
< > = <= >= <> |  | опеÑаÑоÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ |
IS ISNULL NOTNULL |  | IS TRUE, IS FALSE, IS NULL, IS DISTINCT FROM и Ñ. д. |
NOT | ÑпÑава-налево | логиÑеÑкое оÑÑиÑание |
AND | Ñлева-напÑаво | логиÑеÑÐºÐ°Ñ ÐºÐ¾Ð½ÑÑнкÑÐ¸Ñ |
OR | Ñлева-напÑаво | логиÑеÑÐºÐ°Ñ Ð´Ð¸Ð·ÑÑнкÑÐ¸Ñ |
ÐамеÑÑÑе, ÑÑо пÑавила пÑиоÑиÑеÑа опеÑаÑоÑов Ñакже пÑименÑÑÑÑÑ Ðº опеÑаÑоÑам, опÑеделÑннÑм полÑзоваÑелем Ñ Ñеми же именами, ÑÑо и вÑÑепеÑеÑиÑленнÑе вÑÑÑоеннÑе опеÑаÑоÑÑ. ÐапÑимеÑ, еÑли Ð²Ñ Ð¾Ð¿ÑеделиÑе опеÑаÑÐ¾Ñ Â«+» Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑого неÑÑандаÑÑного Ñипа даннÑÑ , он бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ ÑÐ¾Ñ Ð¶Ðµ пÑиоÑиÑеÑ, ÑÑо и вÑÑÑоеннÑй опеÑаÑÐ¾Ñ Â«+», незавиÑимо Ð¾Ñ Ñого, ÑÑо он Ñ Ð²Ð°Ñ Ð´ÐµÐ»Ð°ÐµÑ.
Ðогда в конÑÑÑÑкÑии OPERATOR иÑполÑзÑеÑÑÑ Ð¸Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑа Ñо ÑÑ
емой, напÑÐ¸Ð¼ÐµÑ Ñак:
SELECT 3 OPERATOR(pg_catalog.+) 4;
Ñогда OPERATOR Ð¸Ð¼ÐµÐµÑ Ð¿ÑиоÑиÑÐµÑ Ð¿Ð¾ ÑмолÑаниÑ, ÑооÑвеÑÑÑвÑÑÑий в ТаблиÑе 4.2 ÑÑÑоке «лÑбой дÑÑгой опеÑаÑоÑ». ÐÑо не завиÑÐ¸Ñ Ð¾Ñ Ñого, какие именно опеÑаÑоÑÑ Ð½Ð°Ñ
одÑÑÑÑ Ð² конÑÑÑÑкÑии OPERATOR().
ÐÑимеÑание
Ð PostgreSQL до веÑÑии 9.5 дейÑÑвовали немного дÑÑгие пÑавила пÑиоÑиÑеÑа опеÑаÑоÑов. Ð ÑаÑÑноÑÑи, опеÑаÑоÑÑ <=, >= и <> обÑабаÑÑвалиÑÑ Ð¿Ð¾ обÑÐµÐ¼Ñ Ð¿ÑавилÑ; пÑовеÑки IS имели более вÑÑокий пÑиоÑиÑеÑ; а NOT BETWEEN и ÑвÑзаннÑе конÑÑÑÑкÑии ÑабоÑали неÑоглаÑованно â в некоÑоÑÑÑ
ÑлÑÑаÑÑ
пÑиоÑиÑеÑнее оказÑвалÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ NOT, а не BETWEEN. ÐÑи пÑавила бÑли Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ Ð´Ð»Ñ Ð»ÑÑÑего ÑооÑвеÑÑÑÐ²Ð¸Ñ ÑÑандаÑÑÑ SQL и Ð´Ð»Ñ ÑменÑÑÐµÐ½Ð¸Ñ Ð¿ÑÑаниÑÑ Ð¸Ð·-за неÑоглаÑованной обÑабоÑки логиÑеÑки ÑавнознаÑнÑÑ
конÑÑÑÑкÑий. РболÑÑинÑÑве ÑлÑÑаев ÑÑи Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð¸ÐºÐ°Ðº не пÑоÑвÑÑÑÑ, либо могÑÑ Ð¿ÑивеÑÑи к оÑибкам Ñипа Â«Ð½ÐµÑ Ñакого опеÑаÑоÑа», коÑоÑÑе можно ÑазÑеÑиÑÑ, добавив Ñкобки. Ðднако Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ Ð¾ÑобÑе ÑлÑÑаи, когда запÑÐ¾Ñ Ð±ÑÐ´ÐµÑ ÑазобÑан без оÑибки, но его поведение Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑÑÑ.