<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://www.dzhope.com/index.php</link> 
<description><![CDATA[Web系统架构与服务器运维,php开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://www.dzhope.com/post/97/</link>
<title><![CDATA[利用MYSQL函数进行日期比较]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[数据库技术]]></category>
<pubDate>Tue, 03 Oct 2006 02:10:35 +0000</pubDate> 
<guid>http://www.dzhope.com/post/97/</guid> 
<description>
<![CDATA[ 
	主要的论点是集中在SELECT something FROM table <br/>WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) < = 5; 上，我试验了半天，结果还是出错，今天看了MYSQL的函数，终于出来了结果，不敢独享，贴出来供大家研究，（虽然技术含量不高，别扔我柿子就行，呵呵） <br/><br/>MYSQL的TO_DAYS(DATE)函数是这样说明的： <br/>传回DATE到公元1年的总日数，我测试了一下 <br/>mysql>select to_days(now(0)); <br/>+--------------------------+ <br/>&#124; TO_DAYS(NOW()) &#124; <br/>+--------------------------+ <br/>&#124; 730839 &#124; <br/>+--------------------------+ <br/><br/>出来的是当前时间距离公元1年的总日数，接着我试着用上面的语句测试； <br/><br/>mysql>select TO_DAYS(NOW()) - TO_DAYS(date_col) < = 5; <br/>出现结果： <br/>ERROR 1054:Unknown column 'date_col' in 'field first' <br/><br/>此路不通了，我就试着直接把5代到date_col里去 <br/><br/>mysql>select to_days(now()) - to_days(5); <br/>出现结果： <br/>+---------------------------+ <br/>&#124;to_days(now()) - to_days(5)&#124; <br/>+---------------------------+ <br/>&#124; NULL &#124; <br/>+---------------------------+ <br/><br/>啊？不会吧？这样也不行啊？ <br/>我接着试命令 <br/>mysql>select 。。。。 <br/><br/>突然猛的想到，嘿嘿，to_days(now())出来的是整数，我直接跟整数运算就行了，何必再to_days(date)呢？马上试验 <br/><br/>mysql>select to_days(now()) - 5; <br/>+--------------------------+ <br/>&#124; to_days(now()) -5 &#124; <br/>+--------------------------+ <br/>&#124; 730834 &#124; <br/>+--------------------------+ <br/><br/><br/>OK,万岁，终于得到了我想要的结果，呵呵 下面就是在PHP代码中用SELECT 查询了 <br/><br/>我存数据库向来的习惯就是DATEANDTIME用NOW()直接赋值，显示的时候不用格式化，直接取出来就能用， <br/><br/>下面是我的一个库的部分结构 <br/>CREATE TABLE infomess ( <br/>infoid int(11) NOT NULL auto_increment, <br/>topic varchar(255) NOT NULL, <br/>…… <br/>email varchar(50), <br/>dateandtime datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, <br/>PRIMARY KEY (infoid) <br/>); <br/><br/><br/>这里的DATEANDTIME是标准的日期格式，然后我要查询5天内的记录，下面是SQL查询语句 <br/>$sql="select * from infomess where to_days(dateandtime) >= (to_days(now()) - 5) order by infoid desc limit $offset,$psize"; <br/><br/>就要一个where to_days(dateandtime) >= (to_days(now()) - 5)就够了 后面的是另外的，这里的5可以设为一个变量 <br/><br/>where to_days(dateandtime) >= (to_days(now()) - $limitdays) <br/><br/>然后$limitdays可以用GET方式传递（多数是有GET方式传递） <br/><br/>在你的PHP后面跟上?limitdays=5就行了 显示10天内也一样，$limitdasy改成10就行了 <br/><br/>以上是利用MYSQL函数得到这样的结果，以上的结果都经过测试，因为时间匆忙，如果代码有什么问题，请在文章后评论提出，谢谢 <br/><br/>还可以利用UNIX戳记来得到这样的结果<br/><div class="code"><br/>&amp;lt;?PHP<br/>/* 使用UNITX时间截记实现 */<br/>$time_now =time();<br/>$time_limit = $time_now - (60*60*24*5);<br/>$sql =&amp;quot;SELECT * FROM table WHERE date&amp;gt;$time_limit ORDER BY xxx LIMITm,n&amp;quot;;<br/>mysql_query( $sql );<br/>?&amp;gt;<br/><br/></div><br/>前提是table是整数格式（UNIX时间截记格式）<br/><br/>如果不是的话先要用date()格式化time()出来的数。<br/><br/><br/>Tags - <a href="http://www.dzhope.com/tags/mysql%25E6%2597%25A5%25E6%259C%259F%25E6%25AF%2594%25E8%25BE%2583%25E5%2587%25BD%25E6%2595%25B0/" rel="tag">mysql日期比较函数</a>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/97/#blogcomment9145</link>
<title><![CDATA[[评论] 利用MYSQL函数进行日期比较]]></title> 
<author>呆子 &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Tue, 25 Nov 2008 05:03:24 +0000</pubDate> 
<guid>http://www.dzhope.com/post/97/#blogcomment9145</guid> 
<description>
<![CDATA[ 
	谢谢分享.
]]>
</description>
</item>
</channel>
</rss>