はじめに
にゃーん。趣味でポスグレをやっている者だ。
この記事はPostgreSQL 16 全部ぬこ Advent Calendar 2022 21日目の記事です。
今回はPostgreSQL 16で追加された整数定数の記法について書いてみます。
概要
項目 | 内容 |
---|---|
タイトル | Non-decimal integer literals |
Topic | SQL Commands |
ステータス | commited |
Last Modified | 2022-12-14 |
概要 | 整数定数値の2進、8進、16進記法の追加 |
変更内容
これまで整数定数値の記法として、2進、8進、16進の記法はサポートされていませんでしたが、PostgreSQL 16からサポートされるようになりました。
MLの議論の最初に、「SQL:202x ドラフトに準拠」という記述があったので、SQL準拠が主目的の改善項目のようです。
追加された記法
開発中の文書を見ると、こういう記法が追加されたようです。
0xhexdigits
0ooctdigits
0bbindigits
なお、x、o、bは、小文字、大文字ともOKのようです。
実行例
それぞれ16進、8進、2進での定数表記例を示します。
=# SELECT 0x7F, 0X0FF;
?column? | ?column?
----------+----------
127 | 255
(1 row)
=# SELECT 0o77, 0X017;
?column? | ?column?
----------+----------
63 | 23
(1 row)
=# SELECT 0b1101, 0B01011;
?column? | ?column?
----------+----------
13 | 11
(1 row)
=#
なお、2進、8進、16進表記と小数点や指数表記は併用できないようです。
以下は小数点を併用してエラーになる例です。
=# SELECT 0f11.1;
ERROR: trailing junk after numeric literal at or near "0f"
LINE 1: SELECT 0f11.1;
^
=# SELECT 0o711.1;
ERROR: syntax error at or near ".1"
LINE 1: SELECT 0o711.1;
^
=# SELECT 0b011.1;
ERROR: syntax error at or near ".1"
LINE 1: SELECT 0b011.1;
^
=#
以下は指数表記と併用しようとしてエラーになる例です。
=# SELECT 0f11e2;
ERROR: trailing junk after numeric literal at or near "0f"
LINE 1: SELECT 0f11e2;
^
=# SELECT 0o711e2;
ERROR: trailing junk after numeric literal at or near "0o711e"
LINE 1: SELECT 0o711e2;
^
=# SELECT 0b011e2;
ERROR: trailing junk after numeric literal at or near "0b011e"
LINE 1: SELECT 0b011e2;
^
=#
おわりに
言われてみれば数値定数の2進、8進、16進の記法ってPostgreSQLのSQLを書くときに使ったことなかったなあと。
また、SQL標準に準拠しようという動きはPostgreSQLらしいなとも思いました。