我可以将MysQL时间戳与日期时间列进行比较吗?这不好吗?

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,DATETIMESTAMP所有可以使用同一套格式指定值,其种类并不都具有相同的数值范围.例如,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)