我想和你们讨论几件事。
因为,它们只是简单的问题,所以这里没有数据集。
假设我有一个名为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"时,它可以工作。那么,这是否意味着双引号可以引用日期值?
我只想问,所以欢迎任何回复。
感谢。
答案 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'
字符串将以该格式进行比较。