【问题标题】:TO_TIMESTAMP using POSTGRESQLTO_TIMESTAMP 使用 POSTGRESQL
【发布时间】:2021-12-28 09:12:53
【问题描述】:

如何将数字转换为时间 PAYMENTDATE

SELECT BANKCODE, PAYMENTDATE,
Current_Date, 
TO_TIMESTAMP (PAYMENTDATE)::VARCHAR,'YYYYMMDD',
PAYMENTDATE::VARCHAR,
--TO_CHAR (TO_TIMESTAMP (PAYMENTDATE),'YYYYMMDD'),
SUM (CASE WHEN (TABLETYPE='ET') AND (TRANSACTIONTYPE=2) THEN 1 ELSE 0 END)"OGS",
SUM (CASE WHEN (TABLETYPE='ET') AND (TRANSACTIONTYPE=2) THEN APPROVEDPRICE ELSE 0 END)/100 "OGS GELIR ",
SUM (CASE WHEN (TABLETYPE='ET') AND (TRANSACTIONTYPE=20) THEN 1 ELSE 0 END)"HGS",
SUM (CASE WHEN (TABLETYPE='ET') AND (TRANSACTIONTYPE=20) THEN APPROVEDPRICE ELSE 0 END)/100 "HGS GELIR ",
SUM (CASE WHEN (TABLETYPE='EFV') THEN 1 ELSE 0 END)"IGB",
SUM (CASE WHEN (TABLETYPE='EFV') THEN APPROVEDPRICE ELSE 0 END)/100 "IGB GELIR ",
COUNT(*)"TOTAL",
SUM (APPROVEDPRICE/100)"TUM GELIR"
FROM kvk.sap_transactions_view
WHERE BANKCODE IN ('1','2','4','6','7')
AND PAYMENTDATE BETWEEN '20210801' AND '20211001'

GROUP BY BANKCODE, PAYMENTDATE
ORDER BY BANKCODE;

【问题讨论】:

  • 不要存储数字而不是日期。这是一个严重的错误。几乎所有数据库都有date 类型。使用正确的类型可以很多轻松地将模式、数据和查询从一个数据库迁移到另一个数据库,并避免使用文本或数字导致的数据质量、索引、空间和功能问题
  • numeric 列中究竟存储了什么?你想要的输出到底是什么?不相关,但是:sum(case .. end)也可以写成count(*) filter (where ...)
  • PAYMENTDATE 是一个数字列。我想均衡 CURRET_DATE = PAYMENTDATE 。但是,PAYMENTDATE 格式为数字,而不是 DATE。

标签: sql postgresql date numeric


【解决方案1】:

我找到了正确的语法:

TO_TIMESTAMP(PAYMENTDATE::VARCHAR,'YYYYMMDD')::DATE

【讨论】:

  • 您可以将表达式简化为to_date(PAYMENTDATE::VARCHAR,'YYYYMMDD')。但是你真的应该修复你的数据模型并将列的类型更改为date
猜你喜欢
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2023-02-23
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多