NOWに動的な(列ベースの)日数を追加するにはどうすればよいですか?
SELECT NOW() + INTERVAL a.number_of_days "DAYS" AS "The Future Date"
FROM a;
どこ a.number_of_days
は整数ですか?
私は通常、その数にinterval '1 day'
またはそれに類似した値を掛けます。例:
select now() + interval '1 day' * a.number_of_days from a;
私はこれが1歳であることを知っていますが、列を使用して実際の間隔(たとえば、「日」、「月」)を指定する必要がある場合は、次のようにして文字列を間隔にキャストすることもできます。
SELECT now()+ CAST(the_duration||' '||the_interval AS Interval)
したがって、元の質問は次のようになります。
SELECT now() + CAST(a.number_of_days||" DAYS" AS Interval) as "The Future Date" FROM a;
私はこの方法を好みます。とても簡単できれいだと思います。 postgreでは、interval
で+
演算子をtimestamp
とともに使用する必要があります
select (3||' seconds')::interval;
select now()+ (10||' seconds')::interval,now();
ここでは、秒、分、日、月などを使用でき、列の数値を置き換えることができます。
select now()+ (column_name||' seconds')::interval,now()
from your_table;
列の値に基づいて間隔を作成するには、テーブルに2つの列を追加することをお勧めします。たとえば、列「period_value」:: INT4および列「period_name」:: VARCHAR。列「period_name」には、次の値を格納できます。
+ -------------- + ------------- + | period_value | period_name | + -------------- + ------------- + | 2 |分| + -------------- + ------------- +
今、あなたは書くことができます:
SELECT NOW() - (period_value::TEXT || ' ' || period_name::TEXT)::INTERVAL FROM table;
「41年11月4日」などの間隔文字列値を持つフィールドがあり、それを生年月日に変換する場合は、次のクエリを使用します。
UPDATE "february14" set dob = date '2014/02/01' - (patient_age::INTERVAL)
dobは、変換する日付フィールドです'41年11月4日'から'1972/10/14 'たとえば
patient_ageは、「41年11月4日」のような文字列を持つvarcharフィールドです
そしてこれは年齢を生年月日に戻すクエリです
SELECT now() - INTERVAL '41 years 10 mons 10 days';