mysql Incorrect datetime value: '2016-02%' for column

adsafsa 2016-02-18 04:08:22
1、我有数据表BlogLog:
mysql> select pid,logCreateTime from BlogLog limit 1,5;
+-----+---------------------+
| pid | logCreateTime |
+-----+---------------------+
| 19 | 2015-04-11 18:56:32 |
| 20 | 2016-02-11 19:56:32 |
| 21 | 2016-02-12 19:56:32 |
| 22 | 2016-02-13 19:43:18 |
| 23 | 2016-02-13 20:26:22 |
+-----+---------------------+

2、取出年月:
mysql> select distinct date_format(logCreateTime,'%Y-%m') from BlogLog group by logCreateTime;
+------------------------------------+
| date_format(logCreateTime,'%Y-%m') |
+------------------------------------+
| 2015-04 |
| 2016-02 |
+------------------------------------+

3、再以年月查询数据库:
select pid from BlogLog where user_pid=1 and logCreateTime like '2016-02%';
pid结果能找到,但是有一个warning:
15:56:21,418 WARN SqlExceptionHelper:232 - SQL Warning Code: 1292, SQLState: 22007
15:56:21,419 WARN SqlExceptionHelper:233 - Incorrect datetime value: '2016-02%' for column 'logCreateTime' at row 1
15:56:21,423 WARN SqlExceptionHelper:232 - SQL Warning Code: 1292, SQLState: 22007
15:56:21,424 WARN SqlExceptionHelper:233 - Incorrect datetime value: '2015-04%' for column 'logCreateTime' at row 1


4、问题分析
每次log4j都会打印出来,甚烦,我的mysql版本是5.6.22,
网上有的说是5.6版本时间有所不同,但我不想换数据库版本,
我知道引起警告的原因是我的 '2016-02%'不是时间的标准格式,但我需要以年月对文章归档,不得不如此查询,

我尝试
mysql> select pid from BlogLog where logCreateTime like concat(str_to_date('2016-02', '%Y-%m'), '%');
却Empty set (0.00 sec)
查不出数据
请教大家,有好的方法查询不出警告么?
...全文
1367 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
adsafsa 2016-02-19
  • 打赏
  • 举报
回复
引用 3 楼 zhangbin1988 的回复:
[quote=引用 2 楼 qingiyan 的回复:] [quote=引用 1 楼 zhangbin1988 的回复:]


select pid from BlogLog where user_pid=1 and DATEDIFF(MONTH, logCreateTime, '2016-02-01') = 0;

谢谢你的回答. DATEDIFF() 函数返回两个日期之间的天数,只接收两个参数的,并且我只希望"2016-02"的年月格式查询,不以2016-02-01年月日的格式查询. 我想做的功能就像csdn博客的按年月的文章存档功能, 我有个解决办法,就是在BlogLog新增一个varchar的字段,用以存放2016-02的字符串,也可实现功能,但想用sql查询语句解决此问题.[/quote] DATEDIFF(MONTH, logCreateTime, '2016-02-01') = 0,是取 logCreateTime 是2月份的数据 要么是你没看清楚DATEDIFF的用法 要么没有理解你的需求[/quote] 1、DATEDIFF mysql> select pid from BlogLog where datediff(month,logCreateTime,'2016-02-01')=0; ERROR 1582 (42000): Incorrect parameter count in the call to native function 'datediff' mysql> 2、有1个警告 mysql> select pid from BlogLog where logCreateTime like '2016-02%' limit 1,3; +-----+ | pid | +-----+ | 20 | | 21 | | 22 | +-----+ 3 rows in set, 1 warning (0.00 sec) 3、我解决了此问题,将datetime转换成CHAR去模糊查询,但不知道性能降低了多少,还有like模糊查询性能也不知好不好,小站估计够用了。 没有警告了: mysql> select pid from BlogLog where Convert(logCreateTime,CHAR(20)) like '2016-02%' limit 1,3; +-----+ | pid | +-----+ | 20 | | 21 | | 22 | +-----+ 3 rows in set (0.00 sec)
ayzen1988 2016-02-19
  • 打赏
  • 举报
回复
引用 2 楼 qingiyan 的回复:
[quote=引用 1 楼 zhangbin1988 的回复:]


select pid from BlogLog where user_pid=1 and DATEDIFF(MONTH, logCreateTime, '2016-02-01') = 0;

谢谢你的回答. DATEDIFF() 函数返回两个日期之间的天数,只接收两个参数的,并且我只希望"2016-02"的年月格式查询,不以2016-02-01年月日的格式查询. 我想做的功能就像csdn博客的按年月的文章存档功能, 我有个解决办法,就是在BlogLog新增一个varchar的字段,用以存放2016-02的字符串,也可实现功能,但想用sql查询语句解决此问题.[/quote] DATEDIFF(MONTH, logCreateTime, '2016-02-01') = 0,是取 logCreateTime 是2月份的数据 要么是你没看清楚DATEDIFF的用法 要么没有理解你的需求
adsafsa 2016-02-18
  • 打赏
  • 举报
回复
引用 1 楼 zhangbin1988 的回复:


select pid from BlogLog where user_pid=1 and DATEDIFF(MONTH, logCreateTime, '2016-02-01') = 0;

谢谢你的回答. DATEDIFF() 函数返回两个日期之间的天数,只接收两个参数的,并且我只希望"2016-02"的年月格式查询,不以2016-02-01年月日的格式查询. 我想做的功能就像csdn博客的按年月的文章存档功能, 我有个解决办法,就是在BlogLog新增一个varchar的字段,用以存放2016-02的字符串,也可实现功能,但想用sql查询语句解决此问题.
ayzen1988 2016-02-18
  • 打赏
  • 举报
回复


select pid from BlogLog where user_pid=1 and DATEDIFF(MONTH, logCreateTime, '2016-02-01') = 0;

57,063

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧