如何将不同MySQL列的日期和时间组合起来与完整的DateTime进行比较?

Iva*_*van 9 mysql sql time datetime date

d是DATE,列t是时间,列v是,例如,INT.假设我需要在2012年2月1日15:00之后记录的所有值.如果我写

SELECT * FROM `mytable` WHERE `d` > '2012-02-01' AND `t` > '15:00'
Run Code Online (Sandbox Code Playgroud)

所有在15:00之前在任何日期做出的记录将被排除在结果集之外(以及2012-02-01所有记录),而我想看到它们.如果有一个DATETIME列似乎很容易,但是在我的情况下,有相应的日期和时间列.

我现在能看到的最好的东西就像

SELECT * FROM `mytable` WHERE `d` >= '2012-02-02' OR (`d` = '2012-02-01' AND `t` > '15:00')
Run Code Online (Sandbox Code Playgroud)

有更好的想法吗?也许在MySQL中有这个功能?是不是有类似的东西

SELECT * FROM `mytable` WHERE DateTime(`d`, `t`) > '2012-02-01 15:00'
Run Code Online (Sandbox Code Playgroud)

可能?

Bri*_*laz 21

你可以使用mysql CONCAT()函数将两列一起添加到一个,然后像这样比较它们:

SELECT * FROM `mytable` WHERE CONCAT(`d`,' ',`t`) > '2012-02-01 15:00'
Run Code Online (Sandbox Code Playgroud)

  • @Brian Glaz`CONCAT(d,'',t)`应转换为`TIMESTAMP(CONCAT(d,'',t))`.或者,它可能只是"TIMESTAMP(d,t)". (5认同)
  • 这真的意味着日期时间正常(意味着没有明显的性能损失和没有意外的行为)? (2认同)

Bra*_*ace 11

TIMESTAMP(expr1,expr2)函数明确用于组合日期和时间值:

使用单个参数,此函数将日期或日期时间表达式expr作为日期时间值返回.使用两个参数,它将时间表达式添加expr2到日期或日期时间表达式expr1,并将结果作为日期时间值返回.

由此产生的使用正是您预测的:

SELECT * FROM `mytable` WHERE TIMESTAMP(`d`, `t`) > '2012-02-01 15:00'
Run Code Online (Sandbox Code Playgroud)