我正在阅读工作中的一些旧代码,并注意到有几个带有order by 1子句的视图.这取得了什么成果?
例:
Create view v_payment_summary AS
SELECT A.PAYMENT_DATE,
(SELECT SUM(paymentamount)
FROM payment B
WHERE PAYMENT_DATE = B.PAYMENT_DATE
and SOME CONDITION) AS SUM_X,
(SELECT SUM(paymentamount)
FROM payment B
WHERE PAYMENT_DATE = B.PAYMENT_DATE
and SOME OTHER CONDITION) AS SUM_Y
FROM payment A
ORDER BY 1;
Run Code Online (Sandbox Code Playgroud) 我一直在我的应用程序中使用PHP strtotime和MySQL的UNIX_TIMESTAMP函数,将日期转换为时间戳.PHP和MySQL在我的本地机器上运行,这些函数通常返回相同的结果,正如我所期望的那样:
$ php
<?php echo strtotime("2011-06-02"); ?>
1307001600
mysql> SELECT UNIX_TIMESTAMP("2011-06-02") ts;
+------------+
| ts |
+------------+
| 1307001600 |
+------------+
Run Code Online (Sandbox Code Playgroud)
但是,偶然地,我碰巧注意到当我1983-01-01作为日期输入时,结果不再相等:
$ php
<?php echo strtotime("1983-01-01"); ?>
410263200
mysql> SELECT UNIX_TIMESTAMP("1983-01-01") ts;
+-----------+
| ts |
+-----------+
| 410256000 |
+-----------+
Run Code Online (Sandbox Code Playgroud)
如您所见,PHP返回410263200,而MySQL返回410256000 - 相差7200秒.
这让我很好奇,我想知道时间戳不再等同于什么日期,所以我写了一个以今天的日期(Ymd格式)开头的小程序,使用PHP strtotime和MySQL UNIX_TIMESTAMP并比较结果.然后它从每个值中减去1天并循环直到它们不再相等.
结果:
1983年10月29日
1983年10月29日,出于某种原因,strtotime并UNIX_TIMESTAMP返回值,通过7200秒不同.
有任何想法吗?
谢谢阅读.