最近做项目,好好玩了下MYSQL的日期转换函数,过程如下:
拿当前年份:SELECT DATE_FORMAT(CURDATE(),'%Y年'); 输出:2013年
拿当前年份中第几月:SELECT DATE_FORMAT(CURDATE(),'%Y年第%m月'); 输出:2013年第07月
拿当前年份中第几周:SELECT DATE_FORMAT(CURDATE(),'%Y年第%u周'); 输出:2013年第28周
OK,全部拿到,是不是很爽,更爽的在下面:(呃,大家可以邪恶一下!)
拿到了后,想了一下是否可以转回来呢? 立马动手!
将2013年转成时间对象:
SELECT STR_TO_DATE(year(CURDATE()),"%Y")=STR_TO_DATE('2013年',"%Y年"); 输出: 1
看来有戏!继续将2013年第07月转时间对象:
SELECT date_format(CURDATE(),"%Y-%m")=date_format(STR_TO_DATE('2013年第07月',"%Y年第%m月"),"%Y-%m"); 输出: 1
完全没问题! 再继续将2013年第28周转时间对象:
SELECT date_format(CURDATE(),"%Y-%u")=date_format(STR_TO_DATE('2013年第28周',"%Y年第%u周"),"%Y-%u"); 输出:0
WHY???? 继续找原因,发现个神奇的现象:
SELECT date_format(STR_TO_DATE('2013年第28周',"%Y年第%u周"),"%Y-%u");
输出的结果居然是:2013-613566753 (此处求真人大大们解惑!谢谢!)
问度娘完全没有参考的东西可看。头痛了半天,最后想到如下解决办法:
仍旧是以2013年第28周来比较:
SELECT date_format(CURDATE(),'%Y') = date_format(STR_TO_DATE('2013年第28周',"%Y年"),'%Y')
and date_format(CURDATE(),'%u') = (select SUBSTR('2013年第28周' FROM 7 FOR 2)) ; 输出:1
哈哈,大家看到了,实际上是把当前时间给拆了,字符串也拆了,年和年比月和月比。虽然撮了点,但还是应上了那句经典:
只要实现的效果好,没有人去关注实现的过程是什么!
最后:求解,为什么会有 2013-613566753 这种输出结果! 谢谢!