2011-07-21 75 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