报错:对象必须实现 IConvertible;以分隔符进行分割链接concat_ws的使用方法;mysql数据类型转换cast,convert

错误故障,mysql  服务器上用 concat_ws 函数,连接了一串数字,最后 服务器返回的字段就变成了一个 byte ,而我们想要的类型是  string 类型,那么转换的时候,就报错了.

image

正确的修改方法是在 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]

posted @ 2014-02-18 10:56  梨花驿路  阅读(1539)  评论(0编辑  收藏  举报