【发布时间】: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