2015-02-09 63 views
0

我有日期的日期时间格式的数据库是这样的:日期测距日期不工作 - PHP日期

53 13 2344 4 Alaska 0 2015-02-03 08:15:37 
54 12 567 25 Alabama 0 2015-02-04 08:16:23 
55 36 899 1 Arizona 0 2015-02-05 08:17:15 
56 35 325 1 West Virginia 0 2015-02-05 08:18:19 
57 13 874 2 Alaska 0 2015-02-05 08:21:26 
58 37 6563 1 Indiana 0 2015-02-07 08:22:05 
59 36 644 2 Tennessee 0 2015-02-07 08:23:54 
60 35 435 1 District of Columbia 0 2015-02-05 08:26:10 
61 34 324 2 Idaho 0 2015-02-07 08:36:56 
62 13 1235 5 Alaska 0 2015-02-07 13:35:23 

现在,我想拉记录2015-02-05 AND 2015-02-07

SQL查询我我正在使用的是:

SELECT * FROM `web_matter_attorney` WHERE `ma_datetime` BETWEEN '2015-02-05' AND '2015-02-07' 

但它只返回5日跳过记录的记录为7。意味着它不会拉第7名的纪录。

我也曾尝试:

SELECT * FROM `web_matter_attorney` WHERE `ma_datetime` >= '2015-02-05' AND `ma_datetime` <= '2015-02-07' 

但仍没有运气和同样的反应。

日期名字我的数据库字段为datetime

我用数据表结构:

CREATE TABLE `web_matter_attorney` (
    `wma_ID` int(8) NOT NULL AUTO_INCREMENT, 
    `att_ID` int(8) NOT NULL, 
    `ma_number` varchar(35) NOT NULL, 
    `ma_case_ID` int(8) NOT NULL, 
    `ma_state` varchar(20) NOT NULL, 
    `ma_override` tinyint(1) NOT NULL, 
    `ma_datetime` datetime NOT NULL, 
    PRIMARY KEY (`wma_ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=latin1; 

-- ---------------------------- 
-- Records of web_matter_attorney 
-- ---------------------------- 
INSERT INTO `web_matter_attorney` VALUES ('52', '32', '5494984984', '17', 'Virginia', '0', '2015-01-20 14:48:55'); 
INSERT INTO `web_matter_attorney` VALUES ('53', '13', '2344', '4', 'Alaska', '0', '2015-02-03 08:15:37'); 
INSERT INTO `web_matter_attorney` VALUES ('54', '12', '567', '25', 'Alabama', '0', '2015-02-04 08:16:23'); 
INSERT INTO `web_matter_attorney` VALUES ('55', '36', '899', '1', 'Arizona', '0', '2015-02-05 08:17:15'); 
INSERT INTO `web_matter_attorney` VALUES ('56', '35', '325', '1', 'West Virginia', '0', '2015-02-05 08:18:19'); 
INSERT INTO `web_matter_attorney` VALUES ('57', '13', '874', '2', 'Alaska', '0', '2015-02-05 08:21:26'); 
INSERT INTO `web_matter_attorney` VALUES ('58', '37', '6563', '1', 'Indiana', '0', '2015-02-07 08:22:05'); 
INSERT INTO `web_matter_attorney` VALUES ('59', '36', '644', '2', 'Tennessee', '0', '2015-02-07 08:23:54'); 
INSERT INTO `web_matter_attorney` VALUES ('60', '35', '435', '1', 'District of Columbia', '0', '2015-02-05 08:26:10'); 
INSERT INTO `web_matter_attorney` VALUES ('61', '34', '324', '2', 'Idaho', '0', '2015-02-07 08:36:56'); 
INSERT INTO `web_matter_attorney` VALUES ('62', '13', '1235', '5', 'Alaska', '0', '2015-02-07 13:35:23'); 

回答

1

如果以这种方式ma_datetime BETWEEN '2015-02-05' AND '2015-02-07'使用功能的部分时间将被设置为00:00:00所以结果的查询将为ma_datetime BETWEEN '2015-02-05 00:00:00' AND '2015-02-07 00:00:00',因此此值2015-02-07 08:22:05超出了BETWEEN中定义的范围。

更改为

`ma_datetime` BETWEEN '2015-02-05 00:00:00' AND '2015-02-07 23:59:59'` 
+0

我该如何在PHP中设置'00:00:00'和'23:59:59'。由于查询动态地工作。我的意思是在我的日期'fromdate'和'todate'。 – 2015-02-09 06:37:39

+0

@Testing我不能在你的问题中看到任何PHP代码抱歉。所以我不能说。 – Jens 2015-02-09 06:39:00

+0

这里是我的查询:'$ result = $ mysqli-> query(“SELECT * FROM web_matter_attorney WHERE ma_datetime BETWEEN'$ date_from'AND'$ date_to'”)或die(mysqli_error());' – 2015-02-09 06:40:10

0

您可以使用下面的查询来获得您想要的结果。

SELECT * FROM `web_matter_attorney` WHERE DATE_FORMAT('ma_datetime','%Y-%m-d') >= DATE_FORMAT('2015-02-05','%Y-%m-d') AND DATE_FORMAT('ma_datetime','%Y-%m-d') <= DATE_FORMAT('2015-02-07','%Y-%m-d') 

希望这可以帮助你。

+0

您的查询不适合我。 – 2015-02-09 07:07:20

+0

请尝试下面的查询。 SELECT * FROM'web_matter_attorney' WHERE date_format(ma_datetime,'%Y-%m-%d')IN('2015-02-05','2015-02-07') – 2015-02-09 07:25:37