このSQLite:
date(date, '-' || strftime('%w', date) || ' days')
つまり、AFAIKは、 date
から曜日の日数(つまり、日曜日の場合は0、月曜日の場合は1、...)を減算します。 次に、結果を date
に変換し直します; 日付関数リファレンス
を参照してください。 詳細については。
PostgreSQLに相当するものは次のようになると思います:
d - extract(dow from d)::int
ここで、 d
あなたの日付です。日付から整数を引くと、その日数が差し引かれます。 d
の場合 がタイムスタンプの場合、キャストを追加する必要がある場合があります。 date_trunc('week '、' d')
同様に、それは月曜日から日数を数え始めるので、あなたはそれで1つ離れているでしょう。
date
を使用したSQLiteの簡単な内訳は次のとおりです。 変数がd
に置き換えられました date()
との混同を避けるため 機能:
date(d, '-' || strftime('%w', d) || ' days')
まず、 ||
標準のSQL文字列連結演算子です。 strftime
機能
は、POSIX
に由来する汎用の日付と時刻のフォーマッターです。; %w
フォーマット指定子は、「日曜日をゼロとする数値としての曜日」を意味します。したがって、 strftime
呼び出しは、日曜日に0、月曜日に1、以下同様に土曜日に6までを与えます。 d
の場合 火曜日の場合、 strftime
呼び出しは2になり、全体は次のようになります。
date(d, '-2 days')
SQLiteの修飾子 date
機能
さまざまな形式がありますが、'-2日'
まさにあなたが思うことを意味します: d
から2日を引く 。全体的な結果として、 d
が得られます。 週に切り捨てられます(日曜日が週の最初の日と見なされます)。
PostgreSQL側:
d - extract(dow from d)::int
extract<から始めることができます。 / code>
; 抽出
日付または時刻の特定の部分を抽出するために使用され、 dow
「日曜日が0日である数値としての曜日」を意味します。おなじみですか?次に、 ::int
DOW番号を整数にキャストします。これは、DOWが実際には倍精度値として出力され、PostgreSQLの日付から倍精度を減算するための演算子が定義されていないために必要です。キャストは、標準形式で cast(x as int)
として記述することもできます。 。 PostgreSQLで日付から整数を減算すると、その日数が減算されます。 -interval '3 days'
のように言うと、より明確になります。 しかし、この場合はノイズが増えるだけなので、単純にすることを選択しました。火曜日の場合、PostgreSQLのバージョンは次のようになります。
d - 2
それは次と同じです:
d - interval '2 days'
そして引き算の後、私たちは日曜日に戻ってきます。 date_trunc
>
PostgreSQLでは、日曜日ではなく月曜日に切り捨てられます。