2017-07-04 92 views
0

我有SQL查询简单的问题..我想搜索字段,其中日期开始和结束于特定的日期和时间。SQL - 与日期字符字段 - 如何在两个日期之间搜索

字段被定义为CHAR并且具有结构:DD.MM.YYYY hh:mm:ss并且我无法更改它。

我试图声明一些变量,并通过此搜索,也尝试通过转换。

这是我尝试和没有工作:

SELECT date FROM table WHERE date BETWEEN '1.01.2017 00:00:00' AND '1.02.2017 23:59:59' 

SELECT date FROM table WHERE date >= '1.01.2017 00:00:00' AND date <= '1.02.2017 00:00:00' 

SELECT date FROM table WHERE date >= Convert(DATETIME, '1.01.2017', 104) AND date <= Convert(DATETIME, '1.02.2017', 104) 

总是这个查询我得到的所有日期,而不是该我问了。

+1

您的第三个查询几乎是正确的,您只需将日期列转换为'datetime'数据类型即可。 – HoneyBadger

+0

最后一个查询中的'104'是什么? 'CONVERT'的参数是'(expression,type)'。 – Barmar

+1

存储日期作为日期 – Strawberry

回答

0

我解决了我的问题。问题在于如何将这些字段存储在数据库中。 我以为他们的存储是这样的:DD.MM.YYYY hh:mm:ss,但它只是结构。在数据库中,它们的存储方式如下所示:YYYYMMDDhhmmss,并在WHERE查询行中发生更改后生效。

SELECT date FROM table WHERE date >= '20170101000000' AND date <= '201701' 
-1
SELECT date FROM table WHERE STR_TO_DATE(date, '%d.%m.%Y %H:%i:%s') BETWEEN '2017-01-01 00:00:00' AND '2017-02-01 23:59:59' 

OR

可以使用STR_TO_DATE()功能。

SELECT date FROM table WHERE STR_TO_DATE(date, '%d.%m.%Y %H:%i:%s') BETWEEN STR_TO_DATE('1.01.2017 00:00:00','%d.%m.%Y %H:%i:%s') AND STR_TO_DATE('1.02.2017 23:59:59','%d.%m.%Y %H:%i:%s') 

您可以尝试以上查询。 希望这会帮助你。

+0

'date'不是'DATETIME',它是'CHAR',所以这将执行字符串比较,而不是日期比较。 – Barmar

+0

@Barmar,我纠正。 –

+0

dv只是两次说同样的事情 – Strawberry

0

您的字段不是可以按字母顺序作为字符串进行比较的格式,因此您需要将其转换为日期。但它不是MySQL可以默认解析的格式(它预计格式为YYYY-MM-DD)。因此请使用STR_TO_DATE()以格式字符串解析它。

SELECT date 
FROM table 
WHERE STR_TO_DATE(date, '%d.%m.%Y %H:%i:%s') BETWEEN '2017-01-01 00:00' AND '2017-01-02 23:59:59' 
+0

因为'24小时制'格式,'%H'不是'%h'。 –

+0

是的。把钢琴移到凳子上 – Strawberry

相关问题