2011-07-21 40 views
1

在转过这里之前,我已经挣扎了好几天了。如何创建一个将字符串集合转换为整数的函数

我想构建一个函数,StringToInteger,将文本字符串转换为整数。我研究了网络,并得到了迄今为​​止,我有一些代码将一个字符串,输入到一个变量,一个整数。

DECLARE @YourString varchar(500) 
SELECT @YourString='select' 

;WITH AllNumbers AS 
(
SELECT 1 AS Number 
     UNION ALL 
     SELECT Number+1 
    FROM AllNumbers 
    WHERE Number<LEN(@YourString) 
) 
SELECT 
    (SELECT 
     RIGHT('000'+CONVERT(varchar(max),ASCII(SUBSTRING(@YourString,Number,1))),3) 
     FROM AllNumbers 
     ORDER BY Number 
     FOR XML PATH(''), TYPE 
    ).value('.','varchar(max)') AS NewValue 

--OPTION (MAXRECURSION 500) --<<needed if you have a string longer than 100 

我还发现,关于如何查询表,表B,并将其结果发送到功能,并有一整套运行一些代码。

SELECT 
* 
FROM 
TableB 
CROSS APPLY 
dbo.StringToInteger(TableB.ColumnWithText) AS IntegerOutOfText 

我的问题是,应该如何在上面的代码进行调整,使其加载到数据库的功能,当运行?我有多少尝试,我不能让SQL Server导入它作为一个函数。

而我的另一个问题是,底部代码应该如何调整,以便它调用该函数并让它将整个查询的结果集转换为一组数字。

问候 丹尼尔

回答

1

功能看起来是这样的:

create function StringToInteger(@YourString varchar(500)) 
returns varchar(1500) as 
begin 

    declare @Ret varchar(1500); 

    WITH AllNumbers AS 
    (
    SELECT 1 AS Number 
      UNION ALL 
      SELECT Number+1 
     FROM AllNumbers 
     WHERE Number<LEN(@YourString) 
) 
    SELECT @Ret = 
    (SELECT 
      RIGHT('000'+CONVERT(varchar(max),ASCII(SUBSTRING(@YourString,Number,1))),3) 
      FROM AllNumbers 
      ORDER BY Number 
      FOR XML PATH(''), TYPE 
    ).value('.','varchar(max)'); 

    return @Ret; 
end 

使用这样的:

DECLARE @YourString varchar(500) 
SELECT @YourString='select' 

select dbo.StringToInteger(@YourString) 

使用带表是这样的:

declare @T table (Col1 varchar(10)) 
insert into @T values('select') 

select dbo.StringToInteger(Col1) 
from @T 
+0

它返回一个值,但不是数据类型integer,这是我需要的。我尝试更改函数bigint(也是int)中的变量,但遇到:Msg 248,Level 16,State 1,Line 1 varchar值'050051051049'的转换溢出了一个int列。 – user641605

+0

同样得到:Msg 8115,Level 16,State 2,Line 1 将表达式转换为数据类型bigint的算术溢出错误。 – user641605

+0

@user这里你可以看到int和bigint的最大尺寸http://msdn.microsoft.com/en-us/library/ms187745.aspx –

0

你真的有一些子你做转换之前分析出?

TO_NUMBER()怎么办?这似乎更简单。

+0

嗯,我谷歌了一点。似乎只有一个Oracle命令。我想要做的是取一个字符串,如:'Hello World'并获得一个整数。试过Mikaels回答。它返回一个整数值,但不幸的是不在数据类型整数中。 – user641605