报错:对象必须实现 IConvertible;以分隔符进行分割链接concat_ws的使用方法;mysql数据类型转换cast,convert
2014-02-18 10:56
1306 查看
错误故障,mysql 服务器上用 concat_ws 函数,连接了一串数字,最后 服务器返回的字段就变成了一个 byte ,而我们想要的类型是 string 类型,那么转换的时候,就报错了.
正确的修改方法是在 concat_ws 进行连接后,用 convert 进行转换一下数据类型
下面说说 concat_ws的 使用方法
当使用 concat_ws 的时候,如果后面连接的每个 都是 字符串,那么 连接后的 也是字符串 ,例如
mysql> select concat_ws(',','11','22','33');
+-------------------------------+
| concat_ws(',','11','22','33') |
+-------------------------------+
| 11,22,33 |
+-------------------------------+
1 row in set (0.00 sec)
如果连接的字符中,有一个是null,则不连接进去
和MySQL中CONCAT函数不同的是, CONCAT_WS函数在执行的时候,不会因为NULL值而返回NULL
mysql> SELECT CONCAT_WS(',','11','22',NULL,'33');
+-------------------------------+
| CONCAT_WS(',','11','22',NULL,'33') |
+-------------------------------+
| 11,22,33 |
+-------------------------------+
1 ROW IN SET (0.00 sec)
重点来了,如果连接的是数字,返回的一串 是个啥类型??? 请看最上面的截图 ,返回的是 byte 类型. 所以如果需要返回值是 字符,那么就必须要用 cast或者是 convert进行数据的转换
附Cast,convert的用法:
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。
这个类型 可以是以下值其中的 一个:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
正确的修改方法是在 concat_ws 进行连接后,用 convert 进行转换一下数据类型
DELIMITER $$ USE `sms`$$ DROP PROCEDURE IF EXISTS `J_Mng_Getsmslogs`$$ CREATE DEFINER=`root`@`%` PROCEDURE `J_Mng_Getsmslogs`(p_uid BIGINT,p_schoolid BIGINT,p_yaer INT,p_month INT) BEGIN 1.5【用户】读取指定月份的短信记录 SELECT `SendUid` AS Uid,`SendName` AS `Name`,CONVERT(CONCAT_WS(',',`Day1`,`Day2`,`Day3`,`Day4`,`Day5`,`Day6`,`Day7`,`Day8`,`Day9`,`Day10`,`Day11`,`Day12`,`Day13`,`Day14`,`Day15`,`Day16`,`Day17`,`Day18`,`Day19`,`Day20`,`Day21`,`Day22`,`Day23`,`Day24`,`Day25`,`Day26`,`Day27`,`Day28`,`Day29`,`Day30`,`Day31`),CHAR(6000)) AS Sms FROM `tb_smscount` WHERE `SchoolId`=p_schoolid AND `Month`=p_month AND `Year`=p_yaer; END$$ DELIMITER ;
下面说说 concat_ws的 使用方法
当使用 concat_ws 的时候,如果后面连接的每个 都是 字符串,那么 连接后的 也是字符串 ,例如
mysql> select concat_ws(',','11','22','33');
+-------------------------------+
| concat_ws(',','11','22','33') |
+-------------------------------+
| 11,22,33 |
+-------------------------------+
1 row in set (0.00 sec)
如果连接的字符中,有一个是null,则不连接进去
和MySQL中CONCAT函数不同的是, CONCAT_WS函数在执行的时候,不会因为NULL值而返回NULL
mysql> SELECT CONCAT_WS(',','11','22',NULL,'33');
+-------------------------------+
| CONCAT_WS(',','11','22',NULL,'33') |
+-------------------------------+
| 11,22,33 |
+-------------------------------+
1 ROW IN SET (0.00 sec)
重点来了,如果连接的是数字,返回的一串 是个啥类型??? 请看最上面的截图 ,返回的是 byte 类型. 所以如果需要返回值是 字符,那么就必须要用 cast或者是 convert进行数据的转换
附Cast,convert的用法:
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。
这个类型 可以是以下值其中的 一个:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
相关文章推荐
- 针对使用Myeclipse进行JDBC链接MySQL时添加中文数据出现?的解决方法!
- sql使用cast进行数据类型转换示例
- OC中Foundation集合的使用(其中包括基本数据类型与对象进行转换)
- jQuery的ajax()检验用户名;通过jQuery的load()/get()/post()方法实现;使用XMLHTTPRequest对象来进行AJAX的异步数据交互
- sql使用cast进行数据类型转换
- Python使用pandas扩展库DataFrame对象的pivot方法对数据进行透视转换
- Mongodb 利用mongoshell进行数据类型转换的实现方法
- sql使用cast进行数据类型转换示例
- 使用stringstream对象实现数据类型之间的转换
- 使用stringstream对象实现数据类型之间的转换
- MySQL查询中使用Concat关键字来拼接中文字符乱码(不同的数据类型拼接)解决方式
- group_concat mysql 把结果集中的一列数据用指定分隔符转换成一行
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(6):服务器端和客户端数据类型的自动转换:复杂类型
- 用Convert类实现数据类型转换
- Java 基础数据类型 和 深度克隆对象的2种方法(实现Cloneable接口或者实现对象序列化)
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)
- java对象和json数据转换实现方式3-使用jackson实现
- PHP数组与对象之间使用递归实现转换的方法
- Objective-C中基本数据烦类型与对象数据类型相互转换的方法(OC中NSString的常用API的基础应用3)
- iOS中使用KVC实现JSON数据与Objective-C实体对象之间的转换