没有时区的时间戳= 2012-09-19 18:13:26
PG的时区时间戳= 2012-09-19 18:13:26.893878-04
我可以投射PG date :: timestamp(0)让我接近,但正如预期的那样,日期被四舍五入; 2012-09-19 18:13:27
所以我的问题是我如何才能获得倒数秒?
解决方法 比较时间戳的平等很少能够很好地运作.如果两个时间戳是在2012-09-19 18:13:26.99999999拍摄的,该怎么办?时钟抖动,调度程序抖动,执行时间差异等可能并且经常会将其推到下一秒.它也不一定要接近边缘.你可以试试黑客相反,在较窄的范围内;说2秒:
SET timezone = '+04:00';SELECT (TIMESTAMP '2012-09-19 18:13:26')::timestamptz BETWEEN TIMESTAMPTZ '2012-09-19 18:13:26.893878-04' - INTERVAL '1' SECOND AND TIMESTAMPTZ '2012-09-19 18:13:26.893878-04' + INTERVAL '1' SECOND;
我不确定你可以使用比这更粗糙的东西,因为你的PHP时间戳的精度是1秒.
如果您确定PHP总是截断时间戳(向下舍入)而不是舍入到即使它捕获时间戳,您也可以通过调整包围间隔来粗略地校正它.例如,尝试1秒间隔(您可以测试给定的PHP时间戳精度最窄)尝试,并假设PHP总是截断时间戳:
SELECT (TIMESTAMP '2012-09-19 18:13:26')::timestamptz BETWEEN TIMESTAMPTZ '2012-09-19 18:13:26.893878-04' - INTERVAL '1' SECOND AND TIMESTAMPTZ '2012-09-19 18:13:26.893878-04';
就个人而言,我要确保每侧至少再增加0.1秒:
SELECT (TIMESTAMP '2012-09-19 18:13:26')::timestamptz BETWEEN TIMESTAMPTZ '2012-09-19 18:13:26.893878-04' - INTERVAL '1.1' SECOND AND TIMESTAMPTZ '2012-09-19 18:13:26.893878-04' + INTERVAL '0.1' SECOND;
如果你真的坚持测试平等,请使用:
regress=# SELECT date_trunc('second',TIMESTAMPTZ '2012-09-19 18:13:26.893878-04'); date_trunc ------------------------ 2012-09-19 18:13:26-04(1 row)
但请注意,测试两个单独捕获的时间戳是否相等是危险和错误的.
总结以上是内存溢出为你收集整理的PostgreSQL的圆形时间戳为秒,为postgres预先创建的日期,以毫秒为单位全部内容,希望文章能够帮你解决PostgreSQL的圆形时间戳为秒,为postgres预先创建的日期,以毫秒为单位所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)