Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将字符串转换为ascii整数的sql创建函数_Mysql_Sorting_Stored Procedures - Fatal编程技术网

Mysql 将字符串转换为ascii整数的sql创建函数

Mysql 将字符串转换为ascii整数的sql创建函数,mysql,sorting,stored-procedures,Mysql,Sorting,Stored Procedures,我想按问题编号对记录进行排序,例如:1、2c、10、12a。把它们转换成ascii码的和好吗?如果是,下面创建sql函数的代码中会出现什么错误?如果没有,那么最好的方法是什么 CREATE FUNCTION dbo.asciiCodeInteger (@string AS VARCHAR(3)) RETURNS int AS BEGIN DECLARE @result int; DECLARE @char CHAR(1); SET @

我想按问题编号对记录进行排序,例如:1、2c、10、12a。把它们转换成ascii码的和好吗?如果是,下面创建sql函数的代码中会出现什么错误?如果没有,那么最好的方法是什么

CREATE FUNCTION dbo.asciiCodeInteger (@string AS VARCHAR(3))
    RETURNS int
    AS
    BEGIN
      DECLARE @result int;
      DECLARE @char CHAR(1);

      SET @result = 0;

      WHILE LEN(@string) > 0
      BEGIN
        SET @char = LEFT(@string, 1);
        SET @result = @result + ASCII(@char);
        SET @string = SUBSTRING(@string, 2, LEN(@string));
      END
      RETURN (@result);
    END

我认为,你需要改变一些逻辑,比如

  • 声明@position=1
  • @Char=子字符串(@string,@position,1)
  • 仅修改@position而不是@string
  • 解决方案看起来像,(无法在SQL FIDLE上运行)

    创建函数dbo.asciocodeinteger(@string作为VARCHAR(3))
    返回整数
    作为
    开始
    声明@result int;
    声明@char(1);
    声明@positionint;
    设置@position=1;
    设置@result=0;
    
    而@position我认为,你需要改变一些逻辑,比如

  • 声明@position=1
  • @Char=子字符串(@string,@position,1)
  • 仅修改@position而不是@string
  • 解决方案看起来像,(无法在SQL FIDLE上运行)

    创建函数dbo.asciocodeinteger(@string作为VARCHAR(3))
    返回整数
    作为
    开始
    声明@result int;
    声明@char(1);
    声明@positionint;
    设置@position=1;
    设置@result=0;
    
    虽然@position-oh谢谢,但由于某些原因,出现了语法错误#1064。是因为mysql服务器版本吗?我正在尝试MS SQL server,请检查我的SQL的编辑解决方案,只更改了Len(@string)哦,谢谢,但是由于某些原因,出现了语法错误#1064。是mysql服务器版本造成的吗?我正在尝试MS SQL server,请检查我的SQL的已编辑解决方案,只有Len(@string)中的更改请添加数据库类型。SQL小姐?MySQL?Sybase?根据回复中的注释重新标记为
    mysql
    。请添加数据库类型。SQL小姐?MySQL?Sybase?根据对答案的评论,用mysql重新标记
    CREATE FUNCTION dbo.asciiCodeInteger (@string AS VARCHAR(3))
        RETURNS int
        AS
        BEGIN
          DECLARE @result int;
          DECLARE @char CHAR(1);
          DECLARE @position int;
          SET @position = 1;
          SET @result = 0;
    
          WHILE @position <= LEN(@string)
          BEGIN
            SET @char = SUBSTRING(@string, @position, 1);
            SET @result = @result + ASCII(@char);
            SET @position = @position + 1
          END
          RETURN (@result);
        END