mysql语句语法错误

时间:2022-09-03 15:06:18
create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',cast(ip/id as varchar)),ip%id into re,ip
from(
SELECT  16777216   as id
UNION   ALL   SELECT   65536
UNION   ALL   SELECT   256
UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END

错误如下:
[Err] 1064 - 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 'varchar)),ip%id into re,ip
from(
SELECT  16777216   as id
UNION   ALL   SEL' at line 4

28 个解决方案

#1


帮你移到mysql专区了

#2


delimiter //
create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',cast(ip/id as varchar)),ip%id into re,ip
from(
    SELECT  16777216   as id
    UNION   ALL   SELECT   65536
    UNION   ALL   SELECT   256
    UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END
//
delimiter ;

#3


尝试一下:
delimiter $$
create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',cast(ip/id as varchar)),ip%id into re,ip
from(
    SELECT  16777216   as id
    UNION   ALL   SELECT   65536
    UNION   ALL   SELECT   256
    UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END$$
delimiter;

#4


引用 3 楼 mchdba 的回复:
尝试一下:
delimiter $$
create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',cast(ip/id as varchar)),ip%id into re,ip
from(
    SELECT  16777216   as id
    UNION   ALL   SELECT   65536
    UNION   ALL   SELECT   256
    UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END$$
delimiter;

不是delimiter的问题,我用navicat工具写的,错误不在这些细节上。还是根本的语法哪里错了,请烦重新找下,谢谢

#5


怎么,找不出一个大神来解决吗,是分给少了吗?

#6


顶上,很急,谢谢

#7


DELIMITER //
CREATE   FUNCTION  f_Int2IP (ip BIGINT)  
RETURNS   VARCHAR(15) 
BEGIN
DECLARE   re   VARCHAR(15) DEFAULT '';
SELECT  CONCAT('.', CAST(ip/id AS CHAR)),ip%id INTO re,ip
FROM(
SELECT  16777216   AS id
UNION   ALL   SELECT   65536
UNION   ALL   SELECT   256
UNION   ALL   SELECT   1) a;
-- set 
RETURN STUFF(re,1,1,'');
END
//
DELIMITER ;



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] 


CAST 能转换的类型如以上。。。 

#8


[SQL] create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',CAST(ip/id  as  char)),ip%id into re,ip
from(
SELECT  16777216   as id
UNION   ALL   SELECT   65536
UNION   ALL   SELECT   256
UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END  

[Err] 1221 - Incorrect usage of UNION and INTO


有进展,找到一个错误cast类型值错,但是还有这个问题,看看怎么回事

#9


引用 4 楼 wendi_0506 的回复:
Quote: 引用 3 楼 mchdba 的回复:

尝试一下:
delimiter $$
create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',cast(ip/id as varchar)),ip%id into re,ip
from(
    SELECT  16777216   as id
    UNION   ALL   SELECT   65536
    UNION   ALL   SELECT   256
    UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END$$
delimiter;

不是delimiter的问题,我用navicat工具写的,错误不在这些细节上。还是根本的语法哪里错了,请烦重新找下,谢谢


测试了下,mysql里面没有 STUFF(re,1,1,'') 函数,你这要实现什么功能,可以用substr以及instr来代替实现。

#10


引用 8 楼 wendi_0506 的回复:
[SQL] create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',CAST(ip/id  as  char)),ip%id into re,ip
from(
SELECT  16777216   as id
UNION   ALL   SELECT   65536
UNION   ALL   SELECT   256
UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END  

[Err] 1221 - Incorrect usage of UNION and INTO


有进展,找到一个错误cast类型值错,但是还有这个问题,看看怎么回事


还有,SELECT  concat('.',cast(ip/id as varchar)),ip%id into re,ip 为什么还要往ip里面赋值,ip不是传入的参数吗?

#11


引用 8 楼 wendi_0506 的回复:
[SQL] create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',CAST(ip/id  as  char)),ip%id into re,ip
from(
SELECT  16777216   as id
UNION   ALL   SELECT   65536
UNION   ALL   SELECT   256
UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END  

[Err] 1221 - Incorrect usage of UNION and INTO


有进展,找到一个错误cast类型值错,但是还有这个问题,看看怎么回事


请复制 我的代码去测试一下

引用 8 楼 wendi_0506 的回复:
[SQL] create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',CAST(ip/id  as  char)),ip%id into re,ip
from(
SELECT  16777216   as id
UNION   ALL   SELECT   65536
UNION   ALL   SELECT   256
UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END  

[Err] 1221 - Incorrect usage of UNION and INTO


有进展,找到一个错误cast类型值错,但是还有这个问题,看看怎么回事


自己不会调试,就请看一下别人的代码与你的有啥不同

#12


这个不是本质问题,请继续探讨,顺便请仔细看下into语句和union语句,错误说这块错了
[SQL] create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',CAST(ip/id  as  char)),ip%id into re,ip
from(
SELECT  16777216   as id
UNION   ALL   SELECT   65536
UNION   ALL   SELECT   256
UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END  

[Err] 1221 - Incorrect usage of UNION and INTO

STUFF是我自己返照mssql定义的一个内置函数,内容如下
CREATE DEFINER=`root`@`localhost` FUNCTION `stuff`(
 f_old varchar(1000),f_start int,f_length int,f_replace varchar(1000)
) RETURNS varchar(2000) CHARSET utf8
BEGIN
  return replace(f_old,substring(f_old,f_start,f_length),f_replace);
END

#13


mysql>  show variables like '%func%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF   |
+---------------------------------+-------+
1 row in set (0.00 sec)

mysql>

看下你的创建函数选项是否已经打开了?

#14


DELIMITER $$
DROP FUNCTION IF EXISTS test.stuff$$
CREATE FUNCTION test.`stuff`(
 f_old VARCHAR(1000),f_start INT,f_length INT,f_replace VARCHAR(1000)
) RETURNS VARCHAR(2000) 
BEGIN
  RETURN REPLACE(f_old,SUBSTRING(f_old,f_start,f_length),f_replace);
END$$

DELIMITER $$
DROP FUNCTION IF EXISTS test.f_Int2IP$$
CREATE FUNCTION `test`.`f_Int2IP`(ip BIGINT)
    RETURNS VARCHAR(2000)
    BEGIN
DECLARE re VARCHAR(2000) DEFAULT '';
SELECT CONCAT('.',CAST(ip/id  AS  CHAR)) AS restr,ip%id INTO re ,ip
FROM(
    SELECT  16777216   AS id
    UNION   ALL   SELECT   65536
    UNION   ALL   SELECT   256
    UNION   ALL   SELECT   1) a;
-- RETURN re;
RETURN  STUFF(re,1,1,'');
    END$$
DELIMITER ;




执行结果如下:
mysql> DELIMITER $$
mysql> DROP FUNCTION IF EXISTS test.stuff$$
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE FUNCTION test.`stuff`(
    ->  f_old VARCHAR(1000),f_start INT,f_length INT,f_replace VARCHAR(1000)
    -> ) RETURNS VARCHAR(2000) 
    -> BEGIN
    ->   RETURN REPLACE(f_old,SUBSTRING(f_old,f_start,f_length),f_replace);
    -> END$$
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> DELIMITER $$
mysql> DROP FUNCTION IF EXISTS test.f_Int2IP$$
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE FUNCTION `test`.`f_Int2IP`(ip BIGINT)
    ->     RETURNS VARCHAR(2000)
    ->     BEGIN
    -> DECLARE re VARCHAR(2000) DEFAULT '';
    -> SELECT CONCAT('.',CAST(ip/id  AS  CHAR)) AS restr,ip%id INTO re ,ip
    -> FROM(
    ->     SELECT  16777216   AS id
    ->     UNION   ALL   SELECT   65536
    ->     UNION   ALL   SELECT   256
    ->     UNION   ALL   SELECT   1) a;
    -> -- RETURN re;
    -> RETURN  STUFF(re,1,1,'');
    ->     END$$
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> 
mysql> 

#15


引用 5 楼 wendi_0506 的回复:
怎么,找不出一个大神来解决吗,是分给少了吗?


已经搞定了,请看回帖。

#16


no,还有错误,依旧是那个,贴还不能结啊,为什么不看error信息呢。这个提示你们没见过吗,我刚接触mysql,和mssql区别很大啊
mysql语句语法错误

#17


引用 16 楼 wendi_0506 的回复:
no,还有错误,依旧是那个,贴还不能结啊,为什么不看error信息呢。这个提示你们没见过吗,我刚接触mysql,和mssql区别很大啊
mysql语句语法错误


你把我的sql拿去执行下吧,就知道问题再哪里了。

#18


引用 16 楼 wendi_0506 的回复:
no,还有错误,依旧是那个,贴还不能结啊,为什么不看error信息呢。这个提示你们没见过吗,我刚接触mysql,和mssql区别很大啊
mysql语句语法错误


别截图了,把你的sql copy出来,我拿过来执行下,就知道问题在哪里了,也许是中间的格式不对,也许是你有特殊字符造成的。
我这边执行是OK的,没有报错。

#19


是复制你的程序的,一模一样的呢,亲

#20


对了,你mysql版本号是多少?我的是5.6.12版本的。

#21


mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.51a-community-nt |
+----------------------+
1 row in set

可能还真是版本问题耶,怎么升级到你的那个版本?目前最稳定广泛使用的哪个版本?

#22


引用 21 楼 wendi_0506 的回复:
mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.51a-community-nt |
+----------------------+
1 row in set

可能还真是版本问题耶,怎么升级到你的那个版本?目前最稳定广泛使用的哪个版本?


我在我的5.1.73版本也跑不通,版本太旧了。

#23


引用 21 楼 wendi_0506 的回复:
mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.51a-community-nt |
+----------------------+
1 row in set

可能还真是版本问题耶,怎么升级到你的那个版本?目前最稳定广泛使用的哪个版本?


目前最稳定的版本是5.6.12吧,我们这里用的是这个,有用5.6.14的也不错。

#24


引用 21 楼 wendi_0506 的回复:
mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.51a-community-nt |
+----------------------+
1 row in set

可能还真是版本问题耶,怎么升级到你的那个版本?目前最稳定广泛使用的哪个版本?


我知道问题所在了,是大小写的问题,不是版本的问题。
mysql> DELIMITER ;
mysql> 
mysql> DELIMITER $$
mysql> DROP FUNCTION IF EXISTS test.f_Int2IP$$
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE FUNCTION `test`.`f_Int2IP`(ip BIGINT)
    ->     RETURNS VARCHAR(2000)
    ->     BEGIN
    -> DECLARE re VARCHAR(2000) DEFAULT '';
    -> SELECT CONCAT('.',CAST(ip/id  AS  CHAR)) AS restr,ip%id INTO re ,ip
    -> FROM(
    ->     SELECT  16777216   AS id
    ->     UNION   ALL   SELECT   65536
    ->     UNION   ALL   SELECT   256
    ->     UNION   ALL   SELECT   1) a;
    -> RETURN stuff(re,1,1,',');
    ->     END$$
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.1.73    |
+-----------+
1 row in set (0.00 sec)

mysql>

#25


把default ''去掉就好了 mysql语句语法错误

#26


是大小写的问题,RETURN stuff(re,1,1,',');  STUFF这个函数create的时候是小写的,而在f_Int2IP函数里面引用的却是大写的STUFF,所以报错了。

但是在5.6.12版本里面函数名大小写编译不会报错,在低版本里面会报错的。

#27


引用 21 楼 wendi_0506 的回复:
mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.51a-community-nt |
+----------------------+
1 row in set

可能还真是版本问题耶,怎么升级到你的那个版本?目前最稳定广泛使用的哪个版本?


你看你的create的时候是 stuff,但是在引用的时候用的是STUFF,大小写不兼容啊。我再次看了你的图片的报错,你不是copy我的sql,我的sql里面大小写是统一的。

#28


终于搞定了,360软件下了个mysql5.6,stuff大小写都无所谓了,函数成功执行,结贴了呵呵。2218155404我qq

#1


帮你移到mysql专区了

#2


delimiter //
create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',cast(ip/id as varchar)),ip%id into re,ip
from(
    SELECT  16777216   as id
    UNION   ALL   SELECT   65536
    UNION   ALL   SELECT   256
    UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END
//
delimiter ;

#3


尝试一下:
delimiter $$
create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',cast(ip/id as varchar)),ip%id into re,ip
from(
    SELECT  16777216   as id
    UNION   ALL   SELECT   65536
    UNION   ALL   SELECT   256
    UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END$$
delimiter;

#4


引用 3 楼 mchdba 的回复:
尝试一下:
delimiter $$
create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',cast(ip/id as varchar)),ip%id into re,ip
from(
    SELECT  16777216   as id
    UNION   ALL   SELECT   65536
    UNION   ALL   SELECT   256
    UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END$$
delimiter;

不是delimiter的问题,我用navicat工具写的,错误不在这些细节上。还是根本的语法哪里错了,请烦重新找下,谢谢

#5


怎么,找不出一个大神来解决吗,是分给少了吗?

#6


顶上,很急,谢谢

#7


DELIMITER //
CREATE   FUNCTION  f_Int2IP (ip BIGINT)  
RETURNS   VARCHAR(15) 
BEGIN
DECLARE   re   VARCHAR(15) DEFAULT '';
SELECT  CONCAT('.', CAST(ip/id AS CHAR)),ip%id INTO re,ip
FROM(
SELECT  16777216   AS id
UNION   ALL   SELECT   65536
UNION   ALL   SELECT   256
UNION   ALL   SELECT   1) a;
-- set 
RETURN STUFF(re,1,1,'');
END
//
DELIMITER ;



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] 


CAST 能转换的类型如以上。。。 

#8


[SQL] create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',CAST(ip/id  as  char)),ip%id into re,ip
from(
SELECT  16777216   as id
UNION   ALL   SELECT   65536
UNION   ALL   SELECT   256
UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END  

[Err] 1221 - Incorrect usage of UNION and INTO


有进展,找到一个错误cast类型值错,但是还有这个问题,看看怎么回事

#9


引用 4 楼 wendi_0506 的回复:
Quote: 引用 3 楼 mchdba 的回复:

尝试一下:
delimiter $$
create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',cast(ip/id as varchar)),ip%id into re,ip
from(
    SELECT  16777216   as id
    UNION   ALL   SELECT   65536
    UNION   ALL   SELECT   256
    UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END$$
delimiter;

不是delimiter的问题,我用navicat工具写的,错误不在这些细节上。还是根本的语法哪里错了,请烦重新找下,谢谢


测试了下,mysql里面没有 STUFF(re,1,1,'') 函数,你这要实现什么功能,可以用substr以及instr来代替实现。

#10


引用 8 楼 wendi_0506 的回复:
[SQL] create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',CAST(ip/id  as  char)),ip%id into re,ip
from(
SELECT  16777216   as id
UNION   ALL   SELECT   65536
UNION   ALL   SELECT   256
UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END  

[Err] 1221 - Incorrect usage of UNION and INTO


有进展,找到一个错误cast类型值错,但是还有这个问题,看看怎么回事


还有,SELECT  concat('.',cast(ip/id as varchar)),ip%id into re,ip 为什么还要往ip里面赋值,ip不是传入的参数吗?

#11


引用 8 楼 wendi_0506 的回复:
[SQL] create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',CAST(ip/id  as  char)),ip%id into re,ip
from(
SELECT  16777216   as id
UNION   ALL   SELECT   65536
UNION   ALL   SELECT   256
UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END  

[Err] 1221 - Incorrect usage of UNION and INTO


有进展,找到一个错误cast类型值错,但是还有这个问题,看看怎么回事


请复制 我的代码去测试一下

引用 8 楼 wendi_0506 的回复:
[SQL] create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',CAST(ip/id  as  char)),ip%id into re,ip
from(
SELECT  16777216   as id
UNION   ALL   SELECT   65536
UNION   ALL   SELECT   256
UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END  

[Err] 1221 - Incorrect usage of UNION and INTO


有进展,找到一个错误cast类型值错,但是还有这个问题,看看怎么回事


自己不会调试,就请看一下别人的代码与你的有啥不同

#12


这个不是本质问题,请继续探讨,顺便请仔细看下into语句和union语句,错误说这块错了
[SQL] create   FUNCTION  f_Int2IP (ip bigint)  RETURNS   varchar(15) 
BEGIN
DECLARE   re   varchar(15) default '';
SELECT  concat('.',CAST(ip/id  as  char)),ip%id into re,ip
from(
SELECT  16777216   as id
UNION   ALL   SELECT   65536
UNION   ALL   SELECT   256
UNION   ALL   SELECT   1) a;
set 
RETURN STUFF(re,1,1,'');
END  

[Err] 1221 - Incorrect usage of UNION and INTO

STUFF是我自己返照mssql定义的一个内置函数,内容如下
CREATE DEFINER=`root`@`localhost` FUNCTION `stuff`(
 f_old varchar(1000),f_start int,f_length int,f_replace varchar(1000)
) RETURNS varchar(2000) CHARSET utf8
BEGIN
  return replace(f_old,substring(f_old,f_start,f_length),f_replace);
END

#13


mysql>  show variables like '%func%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF   |
+---------------------------------+-------+
1 row in set (0.00 sec)

mysql>

看下你的创建函数选项是否已经打开了?

#14


DELIMITER $$
DROP FUNCTION IF EXISTS test.stuff$$
CREATE FUNCTION test.`stuff`(
 f_old VARCHAR(1000),f_start INT,f_length INT,f_replace VARCHAR(1000)
) RETURNS VARCHAR(2000) 
BEGIN
  RETURN REPLACE(f_old,SUBSTRING(f_old,f_start,f_length),f_replace);
END$$

DELIMITER $$
DROP FUNCTION IF EXISTS test.f_Int2IP$$
CREATE FUNCTION `test`.`f_Int2IP`(ip BIGINT)
    RETURNS VARCHAR(2000)
    BEGIN
DECLARE re VARCHAR(2000) DEFAULT '';
SELECT CONCAT('.',CAST(ip/id  AS  CHAR)) AS restr,ip%id INTO re ,ip
FROM(
    SELECT  16777216   AS id
    UNION   ALL   SELECT   65536
    UNION   ALL   SELECT   256
    UNION   ALL   SELECT   1) a;
-- RETURN re;
RETURN  STUFF(re,1,1,'');
    END$$
DELIMITER ;




执行结果如下:
mysql> DELIMITER $$
mysql> DROP FUNCTION IF EXISTS test.stuff$$
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE FUNCTION test.`stuff`(
    ->  f_old VARCHAR(1000),f_start INT,f_length INT,f_replace VARCHAR(1000)
    -> ) RETURNS VARCHAR(2000) 
    -> BEGIN
    ->   RETURN REPLACE(f_old,SUBSTRING(f_old,f_start,f_length),f_replace);
    -> END$$
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> DELIMITER $$
mysql> DROP FUNCTION IF EXISTS test.f_Int2IP$$
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE FUNCTION `test`.`f_Int2IP`(ip BIGINT)
    ->     RETURNS VARCHAR(2000)
    ->     BEGIN
    -> DECLARE re VARCHAR(2000) DEFAULT '';
    -> SELECT CONCAT('.',CAST(ip/id  AS  CHAR)) AS restr,ip%id INTO re ,ip
    -> FROM(
    ->     SELECT  16777216   AS id
    ->     UNION   ALL   SELECT   65536
    ->     UNION   ALL   SELECT   256
    ->     UNION   ALL   SELECT   1) a;
    -> -- RETURN re;
    -> RETURN  STUFF(re,1,1,'');
    ->     END$$
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> 
mysql> 

#15


引用 5 楼 wendi_0506 的回复:
怎么,找不出一个大神来解决吗,是分给少了吗?


已经搞定了,请看回帖。

#16


no,还有错误,依旧是那个,贴还不能结啊,为什么不看error信息呢。这个提示你们没见过吗,我刚接触mysql,和mssql区别很大啊
mysql语句语法错误

#17


引用 16 楼 wendi_0506 的回复:
no,还有错误,依旧是那个,贴还不能结啊,为什么不看error信息呢。这个提示你们没见过吗,我刚接触mysql,和mssql区别很大啊
mysql语句语法错误


你把我的sql拿去执行下吧,就知道问题再哪里了。

#18


引用 16 楼 wendi_0506 的回复:
no,还有错误,依旧是那个,贴还不能结啊,为什么不看error信息呢。这个提示你们没见过吗,我刚接触mysql,和mssql区别很大啊
mysql语句语法错误


别截图了,把你的sql copy出来,我拿过来执行下,就知道问题在哪里了,也许是中间的格式不对,也许是你有特殊字符造成的。
我这边执行是OK的,没有报错。

#19


是复制你的程序的,一模一样的呢,亲

#20


对了,你mysql版本号是多少?我的是5.6.12版本的。

#21


mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.51a-community-nt |
+----------------------+
1 row in set

可能还真是版本问题耶,怎么升级到你的那个版本?目前最稳定广泛使用的哪个版本?

#22


引用 21 楼 wendi_0506 的回复:
mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.51a-community-nt |
+----------------------+
1 row in set

可能还真是版本问题耶,怎么升级到你的那个版本?目前最稳定广泛使用的哪个版本?


我在我的5.1.73版本也跑不通,版本太旧了。

#23


引用 21 楼 wendi_0506 的回复:
mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.51a-community-nt |
+----------------------+
1 row in set

可能还真是版本问题耶,怎么升级到你的那个版本?目前最稳定广泛使用的哪个版本?


目前最稳定的版本是5.6.12吧,我们这里用的是这个,有用5.6.14的也不错。

#24


引用 21 楼 wendi_0506 的回复:
mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.51a-community-nt |
+----------------------+
1 row in set

可能还真是版本问题耶,怎么升级到你的那个版本?目前最稳定广泛使用的哪个版本?


我知道问题所在了,是大小写的问题,不是版本的问题。
mysql> DELIMITER ;
mysql> 
mysql> DELIMITER $$
mysql> DROP FUNCTION IF EXISTS test.f_Int2IP$$
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE FUNCTION `test`.`f_Int2IP`(ip BIGINT)
    ->     RETURNS VARCHAR(2000)
    ->     BEGIN
    -> DECLARE re VARCHAR(2000) DEFAULT '';
    -> SELECT CONCAT('.',CAST(ip/id  AS  CHAR)) AS restr,ip%id INTO re ,ip
    -> FROM(
    ->     SELECT  16777216   AS id
    ->     UNION   ALL   SELECT   65536
    ->     UNION   ALL   SELECT   256
    ->     UNION   ALL   SELECT   1) a;
    -> RETURN stuff(re,1,1,',');
    ->     END$$
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.1.73    |
+-----------+
1 row in set (0.00 sec)

mysql>

#25


把default ''去掉就好了 mysql语句语法错误

#26


是大小写的问题,RETURN stuff(re,1,1,',');  STUFF这个函数create的时候是小写的,而在f_Int2IP函数里面引用的却是大写的STUFF,所以报错了。

但是在5.6.12版本里面函数名大小写编译不会报错,在低版本里面会报错的。

#27


引用 21 楼 wendi_0506 的回复:
mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.51a-community-nt |
+----------------------+
1 row in set

可能还真是版本问题耶,怎么升级到你的那个版本?目前最稳定广泛使用的哪个版本?


你看你的create的时候是 stuff,但是在引用的时候用的是STUFF,大小写不兼容啊。我再次看了你的图片的报错,你不是copy我的sql,我的sql里面大小写是统一的。

#28


终于搞定了,360软件下了个mysql5.6,stuff大小写都无所谓了,函数成功执行,结贴了呵呵。2218155404我qq