MySQL中的cast函数
在日常开发中经常会遇到MySQL中定义的类型与实际业务中的类型略有个别差异,比如某字典数据我们使用的是01
、02
这种varchar类型的,在我们查询完成后需要将其进行排序,那么如果不转成数值类型的话,默认会按照字典顺序去排序,但是业务中的含义又是要按照数值的大小去排序,所以,此时我们需要在查询的时候将其转换为数值类型,在使用order by
去排序。
在Impala
中,cast
函数会经常用到,具体语法cast(field as type)
将其转换为你需要的类型,但是我在MySQL中使用cast(type as integer)
会出现下面的错误:
1 | You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTEGER) FROM PRODUCT LIMIT 0, 30' at line 1 |
通过查看MySQL官方文档function_cast,发现原来需要转换为SIGNED [INTEGER]
就可以了。除此之外还有其他类型的转换.
- BINARY[(N)]
- CHAR[(N)]
- DATE
- DATETIME
- DECIMAL[(M[,D])]
- SIGNED [INTEGER]
- TIME
- UNSIGNED [INTEGER]
不过,比较奇特的是,我在MariaDB
中执行cast(type as integer)
就可以,在MySQL中不行,需要修改为cast(type as UNSIGNED)
才行。在MariaDB
中执行cast(type as UNSIGNED)
也是生效的,看来虽然出自同一个源,但还是略有差异,目前这个项目还是混着用这两种库的。看来后面需要统一升级为MySQL 8
了。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment