为什么查询给出0行

时间:2013-10-01 11:19:37

标签: mysql sql query-optimization

查询1

SELECT SessionInfo.IVRSessionInfoID
FROM   SessionInfo
WHERE  SessionCallTime BETWEEN UNIX_TIMESTAMP('2013-08-01 00:00:00') 
                           AND UNIX_TIMESTAMP('2013-08-01 23:59:59')
ORDER  BY SessionInfo.SessionCallTime DESC;

查询2

SELECT SessionInfo.IVRSessionInfoID
FROM   SessionInfo
WHERE  ( SessionInfo.SessionCallTime BETWEEN '2013-08-01 00:00:00' 
                                         AND '2013-08-01 23:59:59' )
ORDER  BY SessionInfo.SessionCallTime DESC; 

有什么区别?为什么第一个查询给出0行而第二个给出记录?

在此表中,这两个日期之间有20000行。

表架构

 CREATE TABLE `SessionInfo` (
 `IVRSessionInfoID` bigint(8) unsigned NOT NULL AUTO_INCREMENT,
`SessionCallTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`MGServerIP` varchar(15) NOT NULL,
`MGServerPort` smallint(2) unsigned NOT NULL DEFAULT '5060',
 `SessionUniqueID` varchar(64) NOT NULL,
`ANI` varchar(20) NOT NULL,
 `CountryID` int(4) unsigned DEFAULT NULL,
 `CountryStateAreaID` int(4) unsigned DEFAULT NULL,
 `AccessNumberProviderLogID` int(4) unsigned DEFAULT NULL,
 `AccessNumberLogID` int(4) unsigned DEFAULT NULL,
  `AccessRestrictionLogID` int(4) unsigned DEFAULT NULL,
 `SubscriberCardID` bigint(8) unsigned DEFAULT NULL,
  `SessionDuration` int(4) unsigned NOT NULL,
  `SessionRNDDuration` int(4) unsigned NOT NULL,
    `TotalCharge` decimal(15,6) unsigned NOT NULL,
   `RuleSetLogID` int(4) unsigned DEFAULT NULL,
  `RuleSetChargeInfoLogID` int(4) unsigned DEFAULT NULL,
 `RuleSetRNDDuration` int(4) unsigned NOT NULL,
 `RuleSetTotalCharge` decimal(15,6) unsigned NOT NULL,
  PRIMARY KEY (`IVRSessionInfoID`),
  UNIQUE KEY `UNIQUE` (`SessionUniqueID`),
 KEY `SessionCallTime` (`SessionCallTime`),
 KEY `ANI` (`ANI`),
 KEY `CountryID` (`CountryID`),
KEY `CountryStateAreaID` (`CountryStateAreaID`),
  KEY `AccessNumberProviderLogID` (`AccessNumberProviderLogID`),
 KEY `AccessNumberLogID` (`AccessNumberLogID`),
KEY `AccessRestrictionLogID` (`AccessRestrictionLogID`),
 KEY `SubscriberCardID` (`SubscriberCardID`),

 ) ENGINE=InnoDB AUTO_INCREMENT=22199955 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;

1 个答案:

答案 0 :(得分:1)

Reference

如果不带参数调用,则返回UNIX时间戳(自1970-01-01 00:00:00'UTC以来的秒数)作为无符号整数。如果使用日期参数调用UNIX_TIMESTAMP(),则它将返回自1970-01-01 00:00:00 UTC以来的参数值。 date可以是DATE字符串,DATETIME字符串,TIMESTAMP或格式为YYMMDD或YYYYMMDD的数字。

mysql> SELECT UNIX_TIMESTAMP();
+---------------------------------------------------------+
| UNIX_TIMESTAMP()                                        |
+---------------------------------------------------------+
| 882226357                                               |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
+---------------------------------------------------------+
| UNIX_TIMESTAMP('1997-10-04 22:23:00')                   |
+---------------------------------------------------------+
| 875996580                                               |
+---------------------------------------------------------+
1 row in set (0.00 sec)