mur*_*lai 7 mysql datetime timestamp
所以,我有一个表格,其中"ABC"列是时间戳,"BCD"是日期时间.
如果我这样做:
SELECT * FROM myTable WHERE ABC > BCD
Run Code Online (Sandbox Code Playgroud)
这不好吗?它会影响性能吗?
他们如何在性能方面进行比较?
Dan*_*llo 13
是的,您可以将a datetime与a 进行比较timestamp.这不错,但要注意以下几点:
请记住,虽然
DATETIME,DATE和TIMESTAMP所有可以使用同一套格式指定值,其种类并不都具有相同的数值范围.例如,TIMESTAMP值不能早于1970 UTC或晚于'2038-01-19 03:14:07'UTC.这意味着一个日期,例如
'1968-01-01',作为一个DATETIME或一个合法的法律DATE,无效作为一个TIMESTAMP值,并转换为0.
来自MySQL参考手册:: DATETIME,DATE和TIMESTAMP类型.
请注意以下测试用例如何正常工作:
CREATE TABLE t1 (d1 datetime, d2 timestamp);
INSERT INTO t1 VALUES ('1968-01-01 00:00:00', '1980-01-01 00:00:00');
INSERT INTO t1 VALUES ('2040-01-01 00:00:00', '1980-01-01 00:00:00');
SELECT * FROM t1 WHERE d2 < d1;
+---------------------+---------------------+
| d1 | d2 |
+---------------------+---------------------+
| 2040-01-01 00:00:00 | 1980-01-01 00:00:00 |
+---------------------+---------------------+
1 row in set (0.00 sec)
SELECT * FROM t1 WHERE d2 > d1;
+---------------------+---------------------+
| d1 | d2 |
+---------------------+---------------------+
| 1968-01-01 00:00:00 | 1980-01-01 00:00:00 |
+---------------------+---------------------+
1 row in set (0.00 sec)
SELECT * FROM t1 WHERE d2 < '2040-01-01 00:00:00';
+---------------------+---------------------+
| d1 | d2 |
+---------------------+---------------------+
| 1968-01-01 00:00:00 | 1980-01-01 00:00:00 |
| 2040-01-01 00:00:00 | 1980-01-01 00:00:00 |
+---------------------+---------------------+
2 rows in set (0.00 sec)
SELECT * FROM t1 WHERE d2 > '2040-01-01 00:00:00';
Empty set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)