Mysql DATE_FORMAT和时间

时间:2013-01-22 13:47:57

标签: mysql date format

我有一个名为“reportinc”的表格,我必须在18:01(时间格式为%H:%i)从今天的18:00提取-it是VARCHAR字段项目。

我尝试过这个查询

SELECT `ID incidente`, `Data/ora apertura`
FROM `reportinc`
WHERE `Data/ora apertura` 
BETWEEN 
(   
SELECT date_format( now( ) - INTERVAL 1
DAY , "%d/%m/%y at 18:01 " )
)
AND 
(
SELECT date_format( now( ) , "%d/%m/%y at 18:00 " )

我想从昨天18:01到今天18:00提取。 但结果是从昨天00:00到今天。 它不会将18:00或18_01视为有效时间格式。 如何指定查询时间?

非常感谢

3 个答案:

答案 0 :(得分:1)

Data/ora apertura字段必须是DATETIME字段,否则您必须进行CAST。

然后你必须这样做:

SELECT `ID incidente`, `Data/ora apertura`
FROM `reportinc`
WHERE `Data/ora apertura` 
BETWEEN 
(   
    SELECT date_format( now( ) - INTERVAL 1 DAY , "%Y-%m-%d 18:01:00" )
)
AND 
(
    SELECT date_format( now( ) , "%Y-%m-%d 18:00:00" 
)

当字段类型为VARCHAR时,之间不能按预期工作。

答案 1 :(得分:0)

首先将格式从varchar更改为有效日期格式。 varchar将值作为字符串,您必须使用正则表达式来分叉日期和时间。最好选择以前的选择。

答案 2 :(得分:0)

EDIT添加了更具体的日期时间格式

我遇到了同样的问题,时间和日期之间的组合。时间被忽略,因此您可以获得一整天的结果。

尝试PHP或其他编程语言来操纵MySQL。或者尝试按照我的建议更改CSV文件的导入方法。

SELECT *,CAST((STR_TO_DATE(`Data/ora apertura`, '%d/%m/%Y %H.%i')) AS DATETIME) 
AS DATE_TIME 
FROM reportinc
WHERE (CAST((STR_TO_DATE(`Data/ora apertura`, '%d/%m/%Y %H.%i')) AS DATETIME))  >= ('2012-22-01 21:00');

SELECT *,CAST((STR_TO_DATE(`Data/ora apertura`, '%d/%m/%Y %H.%i')) AS DATETIME) 
AS DATE_TIME 
FROM reportinc
WHERE (STR_TO_DATE(`Data/ora apertura`, '%d/%m/%Y %H.%i'))  >= ('2012-22-01 21:00');

示例数据:

CREATE TABLE reportinc (
  `ID_incidente` int auto_increment primary key,
  `Data/ora apertura` varchar(30)
  );


INSERT INTO reportinc (`Data/ora apertura`) 
VALUES 
("31/07/2012 10.46"),
("31/07/2012 10.47"),
("22/01/2013 20.00"),
("23/01/2013 10.00");

SQL FIDDLE demo ---

尝试类似:

使用强制转换功能:

SELECT * FROM reportinc WHERE (CAST(`Data/ora apertura` AS DATETIME)) >= NOW() - INTERVAL 3 hour;

使用str_to_date函数:

   SELECT * FROM reportinc WHERE (STR_TO_DATE(`Data/ora apertura`,'%Y-%m-%d %H:%i:%s')) >= NOW() - INTERVAL 3 hour;

你对时间范围有点不清楚所以我花了3个小时作为例子。您还可以使用特定的日期和时间。

使用演员:

`SELECT * FROM reportinc WHERE (CAST(`Data/ora apertura` AS DATETIME)) >= ('2013-01-22 20:00:00');`

使用str_to_date

SELECT  * FROM reportinc WHERE (STR_TO_DATE(apertura, '%Y-%m-%d %H:%i:%s'))  >= ('2013-01-21 20:00:00');

示例数据:

CREATE TABLE reportinc (
  `ID_incidente` int auto_increment primary key,
  `Data/ora apertura` varchar(30),
  `Data/ora apertura1` datetime
  );


INSERT INTO reportinc ( `Data/ora apertura`, `Data/ora apertura1`) 
VALUES (NOW() - INTERVAL 1 day, NOW() - INTERVAL 1 day),
(NOW() - INTERVAL 1 hour, NOW() - INTERVAL 1 hour),
(NOW() - INTERVAL 3 hour, NOW() - INTERVAL 3 hour),
(NOW() - INTERVAL 6 hour, NOW() - INTERVAL 6 hour),
(NOW() - INTERVAL 9 hour, NOW() - INTERVAL 9 hour),
(NOW() - INTERVAL 1 year, NOW() - INTERVAL 1 year);

SQL FIDDLE DEMO

B.T.W。我的建议是停止在列名和表名中使用斜杠,空格等。

如果您愿意接受有助于您的答案,我将不胜感激。