SQL - 带有日期的字符字段 - 如何在两个日期之间进行搜索
SQL - char field with date - how to search between two dates
我对 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)
总是在这个查询之后我得到所有日期,而不是我问的这个。
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'
或
您可以使用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')
您可以试试上面的查询。
您的字段不是可以按字典顺序与字符串进行比较的格式,因此您需要将其转换为日期。但它不是 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'
我解决了我的问题。问题在于这些字段如何存储在数据库中。
我以为它们是这样的存储:DD.MM.YYYY hh:mm:ss,但它只是结构。在 DB 中,它们的存储方式如下:YYYYMMDDhhmmss,并且在更改 WHERE 查询行后它可以工作。
SELECT date FROM table WHERE date >= '20170101000000' AND date <= '20170101235959'
我对 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)
总是在这个查询之后我得到所有日期,而不是我问的这个。
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'
或
您可以使用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')
您可以试试上面的查询。
您的字段不是可以按字典顺序与字符串进行比较的格式,因此您需要将其转换为日期。但它不是 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'
我解决了我的问题。问题在于这些字段如何存储在数据库中。 我以为它们是这样的存储:DD.MM.YYYY hh:mm:ss,但它只是结构。在 DB 中,它们的存储方式如下:YYYYMMDDhhmmss,并且在更改 WHERE 查询行后它可以工作。
SELECT date FROM table WHERE date >= '20170101000000' AND date <= '20170101235959'