POSTGRESQL错误:无法识别日期格式

jrcvhitl  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(2)|浏览(269)
SELECT
  v.accounting_date,
  v.payment_date
 FROM 
  (SELECT doc.document_id, 
  max(CASE WHEN doc.name='accountingDate' THEN doc.value END) AS accounting_date,
  max(CASE WHEN doc.name='paymentDate' THEN doc.value END) AS payment_date
  FROM go_appr_doc_variables doc
  GROUP BY doc.document_id) v
 WHERE TO_CHAR(TO_DATE(v.payment_date, 'YYYYMMDD')+8,'yyyymmdd') >= TO_CHAR(NOW(),'yyyymmdd')

accounting_date和payment_date值格式为'yyyymmdd'
我想做payment_date为+8天,并将其与当前日期进行比较。
但有个问题。

91zkwejq

91zkwejq1#

有多种方法可以操纵和比较日期,
这里有一个选择:

SELECT
  v.accounting_date,
  v.payment_date
 FROM 
  (SELECT doc.document_id, 
  MAX(TO_DATE(CASE WHEN doc.name='accountingDate' THEN doc.value END, 'yyyymmdd')) AS accounting_date,
  MAX(TO_DATE(CASE WHEN doc.name='paymentDate' THEN doc.value END, 'yyyymmdd')) AS payment_date
  FROM go_appr_doc_variables doc
  GROUP BY doc.document_id) v
 WHERE v.payment_date + INTERVAL '8 DAY' >= NOW()::DATE

本例的解释:

  • 在源查询中添加了“TO_DATE()”,用于将字符串转换为日期字段
  • 添加了“+ INTERVAL '8 DAY'”-在日期字段中添加8天
  • 添加“::DATE”-截断时间,只保留日期部分
p5cysglq

p5cysglq2#

我假设doc.value是一个格式正确的字符串。您可以在铸造NOW()date之后直接比较日期,消除小时等。

SELECT
  v.accounting_date,
  v.payment_date
 FROM 
  (SELECT doc.document_id, 
  max(CASE WHEN doc.name='accountingDate' THEN doc.value END) AS accounting_date,
  max(CASE WHEN doc.name='paymentDate' THEN doc.value END) AS payment_date
  FROM go_appr_doc_variables doc
  GROUP BY doc.document_id) v
 WHERE TO_DATE(v.payment_date, 'YYYYMMDD')+8 >= NOW()::date

相关问题