MySQL中是否有类似于Oracle的trunc(sysdate)函数的功能?

4
在Oracle中,我可以像这样查询:
Select * from Orders where trunc(createdDate) = trunc(sysdate)

我想知道如何在MySql中获取所有今天创建的订单。

如何在MySql中实现同样的功能呢?

到目前为止,我只能找到类似于currentdate() = '07-05-2017'的方法,但我不想硬编码日期。

谢谢,

Dapid Candra

3个回答

4

date()函数返回任何日期时间值的日期部分,curdate()函数返回当前日期,因此无需截取其结果:

... date(createdDate)=curdate()

0

是的,您可以使用MySQL的DATE()函数(以及NOW()函数来获取当前日期)。 这里是文档。

提取日期或日期时间表达式expr的日期部分。

您的查询将如下所示:

Select * 
FROM Orders 
WHERE DATE(createdDate) = DATE(NOW())

更新

根据 @Rahul 的建议,我们可以将 DATE(NOW()) 替换为 CURDATE(),因为它返回不带时间戳的日期,例如:

Select * 
FROM Orders 
WHERE DATE(createdDate) = CURDATE()

0

我觉得快了一些

Select * 
FROM Orders 
WHERE createdDate >= curdate();

你能详细说明一下为什么这个会更快吗?谢谢,Fran。 - Dapid Candra
我认为这是因为我只调用了一个函数,而不是两个或三个。 - Fran Cerezo
1
不在列上使用函数可以让查询优化器访问该列上的索引-提供性能优势。如果您在该列上使用函数,则会失去这种优势。研究术语“sargable”。 - Paul Maxwell
谢谢 @used-by-already,我知道LIKE和索引,但不了解函数和索引。我以为这只涉及到函数的性能成本。 - Fran Cerezo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接