2017-04-19 84 views
0

我想使用日期选择器来选择我的数据库中的特定条目。日期与dd.mm.yyyy之间的SQL只匹配日期

我面临的问题是,我从我的查询中获取的条目仅作为日期的一部分进行排序。

我使用的日期格式(在数据库中varchar字段):

*dd.mm.yyyy hh:mm ($date = date("Y-m-d") . ' ' . date("H:i");)* 

例如:

01.04.2016 
10.04.2016 
11.04.2016 
01.04.2017 
10.04.2017 
11.04.2017 

查询得到的条目:

SELECT * 
FROM order_date 
WHERE date >= '10.04.2017' AND date <= '10.04.2017' 

现在我预期只得到匹配的条目,但 查询的结果都是四个表项whi CH 10白天或11开始,即使他们两个是在2016年

正如我在其他职位XX和YY工作之间的看到如果日期被设定为YYYY-MM-DD或YYYYMMDD但问题是我得到了一个数据库,其中有大约20k条目,我需要一个日期选择器,所以我宁愿使用日期格式的格式而不重写所有条目。

是否有可能使用dd.mm.yyyy格式获取日期选择器?

任何帮助高度appriciated

+3

修复数据库比您想象的要容易。添加一个数据类型为“date”的新列。从你现有的专栏更新它。更新对现有列的所有引用,然后将其从表中删除。 –

+0

这个想法与一个新的列和更新/改变它是真的很好,但问题是,数据在不同的位置使用,所以我不能只改变格式而不取代它在几个不同的地方以及 –

回答

1

尝试这样的事情,

STR_TO_DATE('10.04.2017', '%d.%m.%Y') 

SELECT * 
FROM order_date 
WHERE date >= STR_TO_DATE('10.04.2017', '%d.%m.%Y') AND date <= STR_TO_DATE('10.04.2017', '%d.%m.%Y') 
+0

谢谢你的帮助,但我在我的数据库中使用这只是得到一个空的结果到目前为止。 –

+0

不得不修改一些数据,但可以保留我的格式dd.mm.yyyy与STR_TO_DATE。谢谢 –

1

您可以将强制转换列作为DATE,并使用ORDER BY子句。

1

使用STR_TO_DATE功能可帮助。

STR_TO_DATE('10.04.2017','%d.%m.%Y') 
1

如何解决这个想法的东西吗?

SELECT * 
FROM Mytable WHERE date 
       BETWEEN CONVERT(datetime,'10.04.2017',104) 
        AND CONVERT(datetime,'10.04.2017',104) 
+0

感谢您的帮助。我jused在数据库中试过这个,但它告诉#1064 - 你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在'10.04.2017',106) AND CONVERT(datetime,'10 .04.2017',106)'在第3行附近使用正确的语法 - 我不能确定如果我可以在mysql数据库上使用CONVERT() –

+1

在MySQL中,'CONVERT'的参数似乎是倒置的,所以它是'CONVERT('10 .04.2017',datetime)'。但你不能指定日期样式不幸,所以它不能回答你的问题。正如其他人指出的那样,我认为'STR_TO_DATE'是要走的路。 –

相关问题