Webエンジニアのメモ帳

技術的な話を中心に書いています。

【Room・SQLite】数字の0埋めでFORMATが使えない場合の対処法

SQLiteのFORMAT関数

SQLiteでは、以下のようにFORMAT関数で0埋めを行うことができます。

SELECT FORMAT(1,'D3')
# 001と出力される

FORMATはRoomでは使えない

しかし、Androidの開発で使われるRoomでは、FORMATを使うことはできません。

使おうとすると、以下のエラーが表示されます。

There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (no such function: FORMAT)

その原因は、Roomの最新バージョンで使われているSQLiteのバージョンが古いためです。(2023年10月時点の情報)

対処法

以下のように、SUBSTR関数で代用します。

SELECT SUBSTR('00' || :num , -3 ,3)

SUBSTR関数は文字列の一部を切り出す関数で、各引数は以下の通りです。

  • 第1引数 対象の文字列
  • 第2引数 何文字目から切り出すか (今回だと後ろから3文字目)
  • 第3引数 何文字切り出すか

つまり今回の例で言うと、numが10だとしたら、一度0010にしてから、後ろの3文字を切り出します。

このようにして、変数numを0埋めで3桁にすることができます。

参考

stackoverflow.com