我有一个 Date 字段。我以 dd / mm / yyyy 的格式记录数据 它显示得很好。但是当我尝试在选择查询中使用过滤器时,它会返回每一行。我试过这个:
SELECT *
FROM MyTable
WHERE dt_start >= '01/04/2007'
和
SELECT *
FROM MyTable
WHERE dt_start >= DATE_FORMAT('01/04/2007', "%d/%m/%yyyy")
现在,如果我尝试这个,它就会很完美:
SELECT *
FROM MyTable
WHERE dt_start >= '2007/04/01'
我知道它的网站上有标准的 MySQL 日期格式。但我想知道实现这一目标的方法。
答案 0 :(得分:1)
这与您进行比较时日期和字符串之间的转换有关。你可以把你想要的常量放在:
SELECT *
FROM MyTable
WHERE dt_start >= STR_TO_DATE('01/04/2007', '%d/%m/%yyyy') ;
但是,我强烈建议您在查询中使用ISO标准日期格式。这是YYYY-MM-DD。您可以输出您喜欢的任何格式,但在查询中使用标准是一个好主意。
答案 1 :(得分:1)
您要转换日期的语法如下:
UPDATE [table name] SET [date field name] = STR_TO_DATE('01/04/2007', '%Y-%m-%d')
这将把我们所有的日期转换为标准,如戈登林诺夫所说。如果您希望它们在您将其拉出时看起来像您的日期,那么您可以在查询中使用dateformat:
SELECT DATE_FORMAT([date field], '%m/%d/%Y') AS myDate FROM [table name]
这有意义吗? 我也同意Gordon的说法,用标准格式存储日期会更容易。您可以通过这种方式更轻松地操作和比较日期。
修改强>
SELECT * FROM [your table] WHERE date >= STR_TO_DATE('01/04/2007', '%m/%d/%Y')
有了这个,您不必更改日期类型,只需将要评估的字符串更改为where子句中的日期即可。那是你想要的吗?