我有一个MySQL数据库可以使用LASTUPDATE
列作为VARCHAR。
此字段的格式为:YYYY-MM-DD HH:mm:ss
我需要设置一个SELECT查询来查找某个日期之后的所有行,所以我试图以这种方式使用CONVERT
函数
SELECT * from POWER WHERE CONVERT(DATETIME, LASTUPDATE) > 'CONVERT(DATETIME, '2016-12-29 17:24:22')'
但是我收到了错误
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LASTUPDATE) > 'CONVERT(DATETIME, '2016-12-29 17:32:52')'' at line 1
我也尝试过使用:
SELECT * from POWER WHERE CONVERT(DATETIME, LASTUPDATE) > '2016-12-29 17:32:52'
但是我得到了同样的错误
答案 0 :(得分:3)
您可以使用str_to_date
SELECT *
from POWER
WHERE str_to_date(LASTUPDATE, '%Y-%m-%d %H:%i:%s' ) >
str_to_date('2016-12-29 17:24:22', '%Y-%m-%d %H:%i:%s' )
答案 1 :(得分:1)
使用str_to_date()
查询应该像这样使用str_to_date()
。有关详细信息,请参阅MySQL Manual
SELECT
*
from POWER
WHERE
str_to_date(LASTUPDATE, '%Y-%m-%d %H:%i:%s') > '2016-12-29 17:24:22'
日期和时间
请注意,MySQL接受日期和时间文字,因此str_to_date
运算符的右侧不需要另一个>
。有关详细信息,请参阅this。
关于存储日期值
的字符串字段的表单between ... and ...
有人建议使用between ... and ...
的形式,例如一个
如下所示。请注意,只有字符串时,此方法才能
值恰好使用一种格式,在该格式中,按字母顺序(在给定的排序规则中)对字符串进行排序,以提供与日期相同的排序顺序(原始问题中使用的格式 - '%Y-%m-%d %H:%i:%s'
- 恰好满足此条件,但对于日期/时间值的许多字符串表示,这并不能保证(参见下面的示例)。
SELECT
*
from POWER
WHERE
LASTUPDATE between '2016-12-29 17:24:22' AND '2016-12-31 23:59:59';
如果字符串值使用不同的格式,则会失败,例如:
create table power (
lastupdate varchar(40) not null default ''
) engine=innoDB;
insert into power
values
('Dec 30, 2016 07:24:22')
, ('Jan 28, 2016 07:24:22')
对于上述内容,我们仍然必须使用str_to_date()
函数(这次使用的format
参数%b %d, %Y %H:%i:%s
与字符串值使用的格式相匹配)
SELECT
*
from POWER
WHERE
str_to_date(LASTUPDATE, '%b %d, %Y %H:%i:%s') > '2016-12-29 17:24:22';
我有一个显示上述示例的sqlfiddle.com页面。
答案 2 :(得分:0)
convert
是MS-SQL Server函数。在MySQL中,您可以使用具有类似语义的str_to_date
函数:
SELECT *
FROM power
WHERE STR_TO_DATE(lastupdate, '%Y-%m-%d %H-%i-%s') >
STR_TO_DATE('2016-12-29 17:24:22', '%Y-%m-%d %H-%i-%s')