如何创建将一组字符串转换为整数的函数

时间:2011-07-21 13:52:23

标签: sql string tsql integer

在转到这里之前,我已经苦苦挣扎了几天。

我正在尝试构建一个将文本字符串转换为整数的函数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

我还找到了一些关于如何查询表TableB的代码,并将其结果发送到函数并运行整个集。

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

我的问题是,如何调整顶部的代码,以便在运行时将其作为函数加载到数据库中?我尝试了多少,我不能让SQL Server将其作为函数导入。

我的另一个问题是,如何调整底部代码以便它调用函数并将整个查询的结果集转换为设定的数字编号。

祝你好运 丹尼尔

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在进行转换之前,您是否确实要解析一些子字符串?

TO_NUMBER()怎么样?这似乎很简单。