如何截断postgres中的日期?

v b*_*ale 5 postgresql date-arithmetic

我正在使用以下条件来截断 postgres 中的日期

to_date(to_char(trunc(appointment_date),'YYYYMMDD')||appointment_end_time,''YYYYMMDDHH24:MI:SS')AS tq
Run Code Online (Sandbox Code Playgroud)

我如何在 postgres 中使用它?

Bel*_*yer 5

奇怪的数据输入,有时需要奇怪的(至少看起来)查询。尝试(参见小提琴

date_trunc('day',appointment_date) 
       + substr(appoinment_end,12)::interval
Run Code Online (Sandbox Code Playgroud)


小智 4

由于您的调用使用“时间”列的to_char()格式,因此您可以将该列直接转换为值,例如使用运算符:。'HH24:MI:SS'time::appointment_end_time::time

要从日期部分appointment_date和时间值构建新的时间戳,只需添加它们:

appointment_date::date + appointment_end_time::time
Run Code Online (Sandbox Code Playgroud)

因此,首先将时间戳转换为日期(没有时间),然后将时间值添加到其中,从而生成.timestamp


请注意,to_date()返回 adate因此您的代码将再次删除刚刚添加的时间部分。to_timestamp()如果您确实想要时间戳作为结果,则需要使用。


回答问题的标题“如何在 Postgres 中截断日期?” (实际上指的是 a timestampnot a date):您可以将其转换为 a date(见上文),也可以将date_trunc()(not trunc()) 与应截断的单位一起使用。但是,date_trunc返回的timestamp 不是date,因此您无法向结果添加时间。