本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/program/mysql_cast_ifnull_problem.html

关于MySQL的一个CAST和IFNULL函数诡异问题,不明原因,记录一下,明天继续分析。

这个是WP-PostView插件的一段SQL:

SELECT p.ID, p.post_title,

IFNULL( CAST( pm.meta_value AS UNSIGNED ) , 0 ) AS views

FROM wp_posts AS p

LEFT JOIN wp_postmeta AS pm ON pm.post_id = p.ID

AND pm.meta_key = "views"

WHERE p.post_date < "2010-03-05 22:19:55"

AND p.post_status = "publish"

AND p.post_type = "post"

AND p.post_password = ""

ORDER BY views DESC LIMIT 5

在我的数据库上查询结果非常诡异:

ID post_title views

10 [论文]对简易几何机械化证明的进一步研究 9

32 页面总算基本修正好了 9

51 一个很好玩的钢琴Flash游戏 9

60 修改友情链接的排列方式 9

93 UML之父——Ivar Jacobson介紹SMART方法 9

选出来的views列全部是9,不知道为什么。

如果我去掉IFNULL,

SELECT p.ID, p.post_title,

CAST( pm.meta_value AS UNSIGNED ) AS views

FROM wp_posts AS p

LEFT JOIN wp_postmeta AS pm ON pm.post_id = p.ID

AND pm.meta_key = "views"

WHERE p.post_date < "2010-03-05 22:19:55"

AND p.post_status = "publish"

AND p.post_type = "post"

AND p.post_password = ""

ORDER BY views DESC

得到的结果将是对的,

如果去掉CAST,

SELECT p.ID, p.post_title, IFNULL( pm.meta_value, 0 ) AS views

FROM wp_posts AS p

LEFT JOIN wp_postmeta AS pm ON pm.post_id = p.ID

AND pm.meta_key = "views"

WHERE p.post_date < "2010-03-05 22:19:55"

AND p.post_status = "publish"

AND p.post_type = "post"

AND p.post_password = ""

ORDER BY views DESC LIMIT 5

得到的就是错的,并且只有2位数一下的结果,2位数以上的结果出不来,但不是9或者99了。

明天继续分析这个问题。

暂时通过去掉IFNULL来解决。

ifnull mysql date,MySQL的CAST和IFNULL函数的问题相关推荐

  1. mysql date trunc用法_Oracle数据库-trunc函数的用法

    trunc 函数可用于截取日期时间 用法:trunc(字段名,精度) 具体实例: 在表table1中,有一个字段名为sysdate,该行id=123,日期显示:2016/10/28 15:11:58 ...

  2. mysql+cast+0x_mysql cast与convert 函数的用法

    MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值.两者具体的语法如下:CAST(value as type); CONVERT(value, type); ...

  3. mybatis学习(21):MySQL 字符串 转换 CAST与CONVERT 函数的用法

    MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值.两者具体的语法如下: Sql代码 CAST(value as type); CONVERT(value, ...

  4. MySQL CAST与CONVERT 函数的用法

    文章转自 http://www.nowamagic.net/librarys/veda/detail/2044 MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类 ...

  5. Unable to convert MySQL date/time value to System.DateTime

    转 :  http://www.cnblogs.com/zeroone/archive/2012/06/27/2565332.html C#读取MySql时,如果存在字段类型为date/datetim ...

  6. mysql double转字符串_MySQL 字符串 转 int/double CAST与CONVERT 函数的用法

    MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值.两者具体的语法如下: CAST(value as type); CONVERT(value, type) ...

  7. mysql cast 整数_Mysql-CAST/CONVERT 类型转换函数之 整型

    CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值. CAST(xxx  AS   类型)  ,   CONVERT(xxx,类型) 这个类型 可以是以下值其中的 一 ...

  8. MySql数据类型转化-CAST与CONVERT 函数的用法

    MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值.两者具体的语法如下: CAST(value as type); CONVERT(value, type) ...

  9. mysql排序convert_MYSQLVARCHAR排序CAST,CONVERT函数类型转换

    自己建表的时候,把一个字段类型创建为varchar(2) ,其实应该建为integer(2)的,但是今天在后台发现排序有问题,varchar排序有问题,所以该怎么解决呢? 示例表结构: 先来看一下,我 ...

最新文章

  1. 基于倒排表的电力调度知识问答系统构建 (100行代码带你实现nlp问答系统)
  2. Spring-IOC XML 配置多个相同 ID 的 bean 加载分析
  3. NOIP2013货车运输
  4. python3 [装饰器] 总结
  5. Onvif之设备发现-基于gsoap2.8.27
  6. jquery ajax post 传递数组 ,多checkbox 取值
  7. Ubuntu12.04 安装(无法将 grub-efi 软件包安装到/target/中,如果没有 GRUB 启动引导期,所安装的系统无法启动)...
  8. 类加载与 Java主类加载机制解析
  9. C#中各种字符类型的转化
  10. 导出excel乱码问题
  11. Java+SpringBoot+vue+elementui垃圾分类网站系统mysql源码介绍
  12. 8086 CPU 寄存器
  13. Vscode的Tab 键设定
  14. python-matplotlib绘图 -应用subplots_adjust()方法解决图表与画布的间距问题
  15. D触发器、D上升沿触发器、T触发器
  16. PCI/PCIe转串口Linux驱动使用说明
  17. 修改Zabbix标志性logo
  18. 编写一程序从键盘输入圆锥体的半径r 高度h 并计算其体积
  19. 教妹学 Java:大有可为的集合
  20. 二十八. 智能驾驶笔记之基于PointNet++的三维点云分类和语义分割

热门文章

  1. 16年底一份肯定自我的工作总结(两年公安、六年水利)
  2. 如何使用计算机防病毒,如何使用计算机的内置防病毒软件mcafee
  3. goland2020设置go module
  4. random.nextInt()的用法
  5. 色盲测试,没人能过6关!
  6. boolean mybatis_浅谈mybatis中SQL语句给boolean类型赋值问题
  7. 外出携带什么耳机合适?适合假日旅行休闲的蓝牙耳机
  8. Containerd镜像lazy-pulling解读
  9. [c]输入一个英文句子,统计句子中单词的个数
  10. Rust原子类型和内存排序