【发布时间】:2020-09-07 17:26:00
【问题描述】:
我正在使用 sql 查询从我公司的程序中导出数据库。 一切似乎都很好,直到我将“where”声明中的日期更改为前一个。 请在下面找到代码:
SELECT p."Index", p."PSN" || CAST(p."PNR"as int) AS ID,
p."PSN" AS Serie, cast(p."PNR"as int) AS Numar,
pr."PINDate" AS r_gdate,
CASE WHEN pr."AsigEID"='10' THEN pr."PrimSUM" ELSE
pr."PrimSUM"*valuta1."EXCValue" END AS r_prima_lei,
CASE WHEN pr."AsigEID"='2'
THEN pr."PrimSUM"
ELSE CASE WHEN pr."AsigEID"='10' THEN pr."PrimSUM"/valuta2."EXCValue"
ELSE pr."PrimSUM"*valuta1."EXCValue"/valuta2."EXCValue"
END
END AS r_prima_eur,
CASE WHEN pr."AsigEID"='10' THEN pr."AsigSUM" ELSE
pr."AsigSUM"*valuta1."EXCValue" END as r_sa_lei,
CASE WHEN pr."AsigEID"='2'
THEN pr."AsigSUM"
ELSE CASE WHEN pr."AsigEID"='10' THEN pr."AsigSUM"/valuta2."EXCValue"
ELSE pr."AsigSUM"*valuta1."EXCValue"/valuta2."EXCValue"
END
END AS r_sa_eur,
pr."AsigStart", pr."AsigEnd", risc."Code", plink."Index"
FROM "PolsRisc" AS pr
LEFT JOIN "Pols" as p ON p."Index" = pr."PID"
LEFT JOIN "Riscs" as risc ON pr."RID" = risc."Index"
LEFT JOIN "PRLNK" plink ON plink."PTID" = p."PTID" AND plink."RID" = risc."Index"
LEFT JOIN "EXCValues" valuta1 ON valuta1."AtDate" = pr."AsigStart" AND valuta1."EID" = pr."AsigEID"
LEFT JOIN "EXCValues" valuta2 ON valuta2."AtDate" = pr."AsigStart" AND valuta2."EID"='2'
WHERE pr."PINDate" > '2020-08-01' AND pr."IsRezil" = 'false';
当我使用“2020-08-01”时,查询运行良好。当我尝试将其更改为以前的例如。 '2010-01-01' 得到一个错误:
ERROR: invalid input syntax for integer: ""
SQL state: 22P02
我在以前的帖子中寻找解决方案,但我没有设法解决这个问题。
【问题讨论】:
-
我认为问题是由于结合了您的数据和查询而出现的。不在日期选择中。设置“2010-01-01”后,计算的数据量比设置“2020-08-01”时要多。您的列数据类型之类的东西是整数,您在查询中将其用作字符串,反之亦然
-
只使用 2020-08-01 的日期函数,比如这个 date('Y-m-d', strtotime("2020-08-01"))
标签: sql postgresql