我有一个名为“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视为有效时间格式。 如何指定查询时间?
非常感谢
答案 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);
B.T.W。我的建议是停止在列名和表名中使用斜杠,空格等。
如果您愿意接受有助于您的答案,我将不胜感激。