您的位置:首页 > 数据库 > MySQL

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

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





正确的修改方法是在 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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐