错误故障,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]
报错:对象必须实现 IConvertible;以分隔符进行分割链接concat_ws的使用方法;mysql数据类型转换cast,convert