在转到这里之前,我已经苦苦挣扎了几天。
我正在尝试构建一个将文本字符串转换为整数的函数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将其作为函数导入。
我的另一个问题是,如何调整底部代码以便它调用函数并将整个查询的结果集转换为设定的数字编号。
祝你好运 丹尼尔
答案 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()
怎么样?这似乎很简单。