查找日期范围中的日期不起作用 - PHP日期

查找日期范围中的日期不起作用 -  PHP日期

问题描述:

I have dates in datetime format in the database this way:

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

Now, I want to pull records for 2015-02-05 AND 2015-02-07

The SQL Query I am using is:

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

But it only returns records for 5th date skipping records for 7th. Means it is not pulling records for 7th as well.

I have also tried:

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

But still no luck and same response.

My database field for date name is datetime

My table structure with data is:

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');

If you use the function in this way ma_datetime BETWEEN '2015-02-05' AND '2015-02-07' the time part will be set to 00:00:00 so the result of your query will be ma_datetime BETWEEN '2015-02-05 00:00:00' AND '2015-02-07 00:00:00' so this value 2015-02-07 08:22:05 is outside of your range defined in BETWEEN.

Change to

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

You can use below query to get your required result.

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')

Hope this helps you.