LoginSignup
2
0

More than 1 year has passed since last update.

PG16:Non-decimal integer literals

Last updated at Posted at 2022-12-20

はじめに

にゃーん。趣味でポスグレをやっている者だ。

この記事は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らしいなとも思いました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0