有关日期时间类型值的问题

时间:2018-02-16 17:28:18

标签: mysql sql

我想和你们讨论几件事。

因为,它们只是简单的问题,所以这里没有数据集。

假设我有一个名为started_date的日期时间类型列,其中的值如下: yyyy-mm-dd hh:mm:ss。所以,如果我想选择一些大于指定日期的ID(让我们说2017年6月/ 01日),我可以使用

select ID, started_date
from table1
where started_date>"2017-06-01";

这有用吗? 我尝试了一些样本,它确实在mysql中运行。但是,有人告诉我,我无法在不转换格式的情况下将datetime列与字符串值进行比较。它让我很困惑。因为我认为价值" 2017-06-01"这里是日期类型值,所以它不需要转换。或者我错了?

另一件事是关于双引号和单引号,我理解单引号用于字符串值。但是,在这种情况下,当我使用双引号引用" 2017-06-01"时,它可以工作。那么,这是否意味着双引号可以引用日期值?

我只想问,所以欢迎任何回复。

感谢。

3 个答案:

答案 0 :(得分:0)

您的查询没问题。您正在使用字符串的安全日期/时间格式。换句话说,如果必须将值存储为字符串,则使用该格式。

我会将代码编写为:

where started_date >= '2017-06-01'

我认为没有理由在2017-06-01排除午夜(尽管你可能有原因)。其次,单引号是字符串的标准分隔符。

也就是说,您可以将值存储为字符串。

答案 1 :(得分:0)

作为最佳做法,我不会将时间戳与日期戳相比较。在这种情况下,您可以明确并截断开始日期。是的,改为使用单引号。

where SUBSTR(started_date, 1, 10) > '2017-06-01'

答案 2 :(得分:0)

要确保它有效,您可以先将日期时间转换为字符串,然后比较两个字符串:

to_char(started_date,'YYYY-MM-DD') >= '2017-06-01'

字符串将以该格式进行比较。