Mysql STR_TO_DATE为列,但未找到列

Mysql STR_TO_DATE为列,但未找到列,mysql,sql,Mysql,Sql,此查询中有什么错误: select *, STR_TO_DATE(start, '%d/%m/%Y') as date_format from dates where date_format >= 2018-03-19 错误: Column not found: 1054 Unknown column 'date_format' in 'where clause' 不能使用日期格式,因为它只是给定的名称,但STR\u TO\u date(start,'%d/%m/%Y')不能在whe

此查询中有什么错误:

select *, STR_TO_DATE(start, '%d/%m/%Y') as date_format from dates where date_format >= 2018-03-19 
错误:

Column not found: 1054 Unknown column 'date_format' in 'where clause'

不能使用日期格式,因为它只是给定的名称,但
STR\u TO\u date(start,'%d/%m/%Y')
不能在
where
子句中使用列别名。MySQL有一个扩展,您可以在
having
子句中进行扩展(无需进行任何聚合)。因此,您可以:

select d.*, STR_TO_DATE(start, '%d/%m/%Y') as date_format
from dates d
having date_format >= '2018-03-19';
通常的建议是重复以下表达式:

select d.*, STR_TO_DATE(start, '%d/%m/%Y') as date_format
from dates d
having STR_TO_DATE(start, '%d/%m/%Y') >= '2018-03-19';
但是,我强烈建议您更改表的结构。日期不应存储为字符串。您可以轻松解决此问题:

update dates
    set start = STR_TO_DATE(start, '%d/%m/%Y');

alter table dates modify column start date;
这样试试

date\u格式
不是字段,因此使用
start
而不是
date\u格式

select *, STR_TO_DATE(start, '%d/%m/%Y') as date_format from dates where start >= 2018-03-19 

其他解决方案的可能副本是视图。