2015-08-14 153 views
1

我想它的问题记录没有进行排序,例如:1,2C,10,12A。将它们转换成ascii代码的总和是否好?如果是的话,下面的代码创建sql funcion会出现什么错误?如果不是,那么更好的方法是什么?SQL创建函数将字符串转换为ASCII整数

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 
+0

请添加数据库类型。 MS SQL? MySQL的? SYBASE? –

+0

用'mysql'重新标记了基于评论的答案 –

回答

0

我想,你需要改变一些逻辑一样,

  1. 申报@位置= 1
  2. @Char = SUBSTRING(@string,@position,1)仅
  3. 修改@position不是@string。

解决方案的样子,(无法在SQL小提琴运行)

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 
+0

哦谢谢,但由于某些原因,语法错误发生#1064。它是由mysql服务器版本引起的? – Jerryc

+0

我正在尝试MS SQL服务器,请检查编辑的解决方案为我的SQL,只改变Len(@string) –