時刻のリセット対応

上とおんなじ感じで、日付やタイムスタンプの時刻部分をゼロにリセットする組み込み関数 @resetTimePart も作りました。

select * from employee where updateTimestamp < /* @resetTimePart(updateTimestamp) */'2001-01-01 00:00:00'

バインドする値が「2009-01-23 12:34:56」でも、@resetTimePartを介すと「2009-01-23 00:00:00」というように時刻部分がゼロにセットされます。

今のところ用意している組み込み関数は、Like検索対応の@startWith、@endWith、@containと、この@resetTimePartなのですが、ほかにも何かありますかねー?

これらの対応は次のバージョン(0.9.9)に含まれます。

追記 21:50
id:jfluteさんのコメントを受けて、@resetTimePartは廃止して@minimizeTimePartと@maximizeTimePartを導入しようと思います。日付を一日進めるよりは同じ日で最大値にしたほうがbetweenが使えて便利かなと思うので。@minimizeTimePartはもしかしたら使わなくてもいいこと多いかもしれませんが、対称性を考えるとあったほうがわかりやすいと思うので名前を変えて残しておきます。

select * from employee where updateTimestamp 
between /* @minimizeTimePart(startTimestamp) */'2001-01-01 00:00:00' and /* @maximizeTimePart(endTimestamp) */'2001-01-05 23:59:59.999999999'

追記 00:10
またまたid:jfluteさんのコメントを受けて、@minimizeTimePartと@maximizeTimePartはやめて、@roundDownTimePartと@roundUpTimePartを導入することにしました。今のところSQL Serverはサポートしていませんが、いずれはサポートしたいのでSQL Serverでも使えるように(まちがいにくいように)しておきます。貴重な情報ありがとうございます。

select * from employee 
where 
updateTimestamp >= /* @roundDownTimePart(startTimestamp) */'2001-01-01 00:00:00'
and
updateTimestamp < /* @roundUpTimePart(endTimestamp) */'2001-01-05 00:00:00'

バインドする値が「2009-01-23 12:34:56」でも、@roundUpTimePartを介すと「2009-01-24 00:00:00」となります。要するに切り上げです。@roundDownTimePartは切捨て。