| ÐокÑменÑаÑÐ¸Ñ Ð¿Ð¾ PostgreSQL 9.4.1 | |||
|---|---|---|---|
| ÐÑед. | УÑÐ¾Ð²ÐµÐ½Ñ Ð²ÑÑе | Ðлава 9. ФÑнкÑии и опеÑаÑоÑÑ | След. |
9.3. ÐаÑемаÑиÑеÑкие ÑÑнкÑии и опеÑаÑоÑÑ
ÐаÑемаÑиÑеÑкие опеÑаÑоÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð´Ð»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑва Ñипов PostgreSQL. Ðак ÑабоÑаÑÑ ÑÑи опеÑаÑии Ñ Ñипами, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ð½ÐµÑ ÑÑандаÑÑнÑÑ ÑоглаÑений о маÑемаÑиÑеÑÐºÐ¸Ñ Ð´ÐµÐ¹ÑÑвиÑÑ (напÑимеÑ, Ñ Ñипами даÑÑ/вÑемени), Ð¼Ñ Ð¾Ð¿Ð¸Ñем в поÑледÑÑÑÐ¸Ñ ÑÐ°Ð·Ð´ÐµÐ»Ð°Ñ .
РТаблиÑе 9-2 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе доÑÑÑпнÑе маÑемаÑиÑеÑкие опеÑаÑоÑÑ.
ТаблиÑа 9-2. ÐаÑемаÑиÑеÑкие опеÑаÑоÑÑ
| ÐпеÑаÑÐ¾Ñ | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ | РезÑлÑÑÐ°Ñ |
|---|---|---|---|
| + | Ñложение | 2 + 3 | 5 |
| - | вÑÑиÑание | 2 - 3 | -1 |
| * | Ñмножение | 2 * 3 | 6 |
| / | деление (пÑи ÑелоÑиÑленном делении оÑÑаÑок оÑбÑаÑÑваеÑÑÑ) | 4 / 2 | 2 |
| % | оÑÑаÑок Ð¾Ñ Ð´ÐµÐ»ÐµÐ½Ð¸Ñ | 5 % 4 | 1 |
| ^ | возведение в ÑÑÐµÐ¿ÐµÐ½Ñ | 2.0 ^ 3.0 | 8 |
| |/ | квадÑаÑнÑй коÑÐµÐ½Ñ | |/ 25.0 | 5 |
| ||/ | кÑбиÑеÑкий коÑÐµÐ½Ñ | ||/ 27.0 | 3 |
| ! | ÑакÑоÑиал | 5 ! | 120 |
| !! | ÑакÑоÑиал (пÑеÑикÑÐ½Ð°Ñ ÑоÑма) | !! 5 | 120 |
| @ | модÑÐ»Ñ ÑиÑла (абÑолÑÑное знаÑение) | @ -5.0 | 5 |
| & | биÑовÑй AND | 91 & 15 | 11 |
| | | биÑовÑй OR | 32 | 3 | 35 |
| # | биÑовÑй XOR | 17 # 5 | 20 |
| ~ | биÑовÑй NOT | ~1 | -2 |
| << | биÑовÑй Ñдвиг влево | 1 << 4 | 16 |
| >> | биÑовÑй Ñдвиг впÑаво | 8 >> 2 | 2 |
ÐиÑовÑе опеÑаÑоÑÑ ÑабоÑаÑÑ ÑолÑко Ñ ÑелоÑÑнÑми Ñипами даннÑÑ , Ñогда как дÑÑгие и ÑабоÑаÑÑ Ð¸ Ñ Ð¾ÑÑалÑнÑми ÑиÑловÑми Ñипами. ÐиÑовÑе опеÑаÑии Ñакже ÑабоÑаÑÑ Ñ Ð±Ð¸ÑовÑми ÑÑÑоками bit и bit varying, как показано в ТаблиÑе 9-11.
РТаблиÑе 9-3 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе ÑÑÑеÑÑвÑÑÑие маÑемаÑиÑеÑкие ÑÑнкÑии. СокÑаÑение dp в ней обознаÑÐ°ÐµÑ Ñип double precision (плаваÑÑее Ñ Ð´Ð²Ð¾Ð¹Ð½Ð¾Ð¹ ÑоÑноÑÑÑÑ). Ðногие из ÑÑÐ¸Ñ ÑÑнкÑий имеÑÑ Ð½ÐµÑколÑко ÑоÑм Ñ ÑазнÑми Ñипами аÑгÑменÑов. Ðа иÑклÑÑением ÑлÑÑаев, где ÑÑо Ñказано Ñвно, лÑÐ±Ð°Ñ ÑоÑма ÑÑнкÑии возвÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ Ñого же Ñипа, ÑÑо и аÑгÑменÑ. ФÑнкÑии, ÑабоÑаÑÑие Ñ Ð´Ð°Ð½Ð½Ñми double precision, в маÑÑе Ñвоей иÑполÑзÑÑÑ ÑеализаÑии из ÑиÑÑемнÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñек ÑеÑвеÑа, поÑÑÐ¾Ð¼Ñ ÑоÑноÑÑÑ Ð¸ поведение в гÑаниÑнÑÑ ÑлÑÑаÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ ÑиÑÑÐµÐ¼Ñ ÑеÑвеÑа.
ТаблиÑа 9-3. ÐаÑемаÑиÑеÑкие ÑÑнкÑии
| ФÑнкÑÐ¸Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ | РезÑлÑÑÐ°Ñ |
|---|---|---|---|---|
abs(x) | Ñип аÑгÑменÑа | модÑÐ»Ñ ÑиÑла (абÑолÑÑное знаÑение) | abs(-17.4) | 17.4 |
cbrt(dp) | dp | кÑбиÑеÑкий коÑÐµÐ½Ñ | cbrt(27.0) | 3 |
ceil(dp или numeric) | Ñип аÑгÑменÑа | наименÑÑее Ñелое не менÑÑе аÑгÑменÑа | ceil(-42.8) | -42 |
ceiling(dp или numeric) | Ñип аÑгÑменÑа | наименÑÑее Ñелое не менÑÑе аÑгÑменÑа (Ñиноним ceil) | ceiling(-95.3) | -95 |
degrees(dp) | dp | пÑеобÑазование Ñадианов в гÑадÑÑÑ | degrees(0.5) | 28.6478897565â412 |
div(y numeric, x numeric) | numeric | ÑелоÑиÑленнÑй ÑезÑлÑÑÐ°Ñ y/x | div(9,4) | 2 |
exp(dp или numeric) | Ñип аÑгÑменÑа | ÑкÑпоненÑа | exp(1.0) | 2.7182818284â5905 |
floor(dp или numeric) | Ñип аÑгÑменÑа | наиболÑÑее Ñелое не болÑÑе аÑгÑменÑа | floor(-42.8) | -43 |
ln(dp или numeric) | Ñип аÑгÑменÑа | наÑÑÑалÑнÑй логаÑиÑм | ln(2.0) | 0.6931471805â59945 |
log(dp или numeric) | Ñип аÑгÑменÑа | логаÑиÑм по оÑÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ 10 | log(100.0) | 2 |
log(b numeric, x numeric) | numeric | логаÑиÑм по оÑÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ b | log(2.0, 64.0) | 6.0000000000 |
mod(y, x) | завиÑÐ¸Ñ Ð¾Ñ Ñипов аÑгÑменÑов | оÑÑаÑок Ð¾Ñ Ð´ÐµÐ»ÐµÐ½Ð¸Ñ y/x | mod(9,4) | 1 |
pi() | dp | конÑÑанÑа "π" | pi() | 3.1415926535â8979 |
power(a dp, b dp) | dp | a возводиÑÑÑ Ð² ÑÑÐµÐ¿ÐµÐ½Ñ b | power(9.0, 3.0) | 729 |
power(a numeric, b numeric) | numeric | a возводиÑÑÑ Ð² ÑÑÐµÐ¿ÐµÐ½Ñ b | power(9.0, 3.0) | 729 |
radians(dp) | dp | пÑеобÑазование гÑадÑÑов в ÑÐ°Ð´Ð¸Ð°Ð½Ñ | radians(45.0) | 0.7853981633â97448 |
round(dp или numeric) | Ñип аÑгÑменÑа | окÑÑгление до ближайÑего Ñелого | round(42.4) | 42 |
round(v numeric, s int) | numeric | окÑÑгление v до s деÑÑÑиÑнÑÑ Ð·Ð½Ð°ÐºÐ¾Ð² | round(42.4382, 2) | 42.44 |
sign(dp или numeric) | Ñип аÑгÑменÑа | знак аÑгÑменÑа (-1, 0, +1) | sign(-8.4) | -1 |
sqrt(dp или numeric) | Ñип аÑгÑменÑа | квадÑаÑнÑй коÑÐµÐ½Ñ | sqrt(2.0) | 1.4142135623â731 |
trunc(dp или numeric) | Ñип аÑгÑменÑа | окÑÑгление к нÑÐ»Ñ | trunc(42.8) | 42 |
trunc(v numeric, s int) | numeric | окÑÑгление к 0 до s деÑÑÑиÑнÑÑ Ð·Ð½Ð°ÐºÐ¾Ð² | trunc(42.4382, 2) | 42.43 |
width_bucket(op numeric, b1 numeric, b2 numeric, count int) | int | возвÑаÑÐ°ÐµÑ Ð½Ð¾Ð¼ÐµÑ Ð³ÑÑппÑ, в коÑоÑÑÑ Ð¿Ð¾Ð¿Ð°Ð´ÑÑ op в гиÑÑогÑамме Ñавной глÑÐ±Ð¸Ð½Ñ Ñ ÑиÑлом гÑÑпп count, в диапазоне Ð¾Ñ b1 до b2 | width_bucket(5.35, 0.024, 10.06, 5) | 3 |
width_bucket(op dp, b1 dp, b2 dp, count int) | int | возвÑаÑÐ°ÐµÑ Ð½Ð¾Ð¼ÐµÑ Ð³ÑÑппÑ, в коÑоÑÑÑ Ð¿Ð¾Ð¿Ð°Ð´ÑÑ op в гиÑÑогÑамме Ñавной глÑÐ±Ð¸Ð½Ñ Ñ ÑиÑлом гÑÑпп count, в диапазоне Ð¾Ñ b1 до b2 | width_bucket(5.35, 0.024, 10.06, 5) | 3 |
РТаблиÑе 9-4 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе ÑÑнкÑии Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑии ÑлÑÑайнÑÑ ÑиÑел.
ТаблиÑа 9-4. СлÑÑайнÑе ÑÑнкÑии
| ФÑнкÑÐ¸Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание |
|---|---|---|
random() | dp | ÑлÑÑайное ÑиÑло в диапазоне 0.0 <= x < 1.0 |
setseed(dp) | void | задаÑÑ Ð¾ÑпÑавнÑÑ ÑоÑÐºÑ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑÐ¸Ñ Ð²Ñзовов random() (знаÑение Ð¼ÐµÐ¶Ð´Ñ -1.0 и 1.0, вклÑÑÐ°Ñ Ð³ÑаниÑÑ) |
ХаÑакÑеÑиÑÑики знаÑений, возвÑаÑаемÑÑ
ÑÑнкÑией random() завиÑÑÑ Ð¾Ñ ÑиÑÑемÑ. ÐÐ»Ñ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² кÑипÑогÑаÑии они непÑигоднÑ; алÑÑеÑнаÑÐ¸Ð²Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² pgcrypto.
ÐаконеÑ, в ТаблиÑе 9-5 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе ÑÑигономеÑÑиÑеÑкие ÑÑнкÑии. ÐÑе ÑÑи ÑÑнкÑии пÑинимаÑÑ Ð°ÑгÑменÑÑ Ð¸ возвÑаÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñипа double precision. ÐÑгÑменÑÑ ÑÑигономеÑÑиÑеÑкиÑ
ÑÑнкÑий вÑÑажаÑÑÑÑ Ð² ÑадианаÑ
. Также в ÑадианаÑ
вÑÑажаÑÑÑÑ ÑезÑлÑÑаÑÑ Ð¾Ð±ÑаÑнÑÑ
ÑÑнкÑий. ÐÐ»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ ÑпомÑнÑÑÑе вÑÑе ÑÑнкÑии radians() и degrees().
| ÐÑед. | ÐаÑало | След. |
| ÐпеÑаÑоÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ | УÑÐ¾Ð²ÐµÐ½Ñ Ð²ÑÑе | СÑÑоковÑе ÑÑнкÑии и опеÑаÑоÑÑ |