SQLiteへPHPで作成したTO_CHAR関数を設定する

SQLiteの日付書式関数は貧弱なので、TO_CHAR関数を実装して強化してみます。

SQLite日付書式(STRFTIME)関数について

SQLiteの日付書式関数(STRFTIME関数)は本家のドキュメントを見ると独自仕様のSQL関数となっていて、移植性が非常に悪いです。

よって、今回はPostgreSQLの仕様に合わせてTO_CHAR関数を実装しようと思います。

TO_CHAR関数のPHPコード

今回TO_CHAR関数を以下のように実装しました。
※以下で使用しているConnectクラスは【SQLite操作用PHPクラス】に記載しています。

$con = new Connect( '/database/file/path' );
// スカラー関数登録メソッドで登録する。
$con->regist_scalar(
  'TO_CHAR',
  function ( $datetime, $format ) {
    try {
      // TIMESTAMPをUNIXEPOCHに変換する
      $epoch = date_create( $datetime, new DateTimeZone( 'Asia/Tokyo' ) );
      $formats = array( 
        'YYYY'  => 'Y',   // 西暦年4桁
        'MM'    => 'm',   // 月(00-12)
        'DD'    => 'd',   // 日(00-28/29/30/31)
        'HH24'  => 'H',   // 時(00-23)
        'MI'    => 'i',   // 分(00-59)
        'SS'    => 's'    // 秒(00-59)
      );
      // TO_CHARのフォーマットをPHPのフォーマットに変換する
      $format = str_replace( array_keys( $formats ), array_values( $formats ), $format );
      // UNIXEPOCHをPHPのフォーマットに変換し日付文字列を返す
      return $epoch->format( $format );
    } catch( Exception $e ) {
      // 変換に失敗したときは空文字を返す
      return '';
    }
  }
);