Как создать функцию, которая преобразует набор строк в целое число - PullRequest
1 голос
/ 21 июля 2011

Я боролся уже пару дней, прежде чем повернуть сюда.

Я пытаюсь создать функцию 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 как функцию.

И другой мой вопрос: как настроить нижний код так, чтобы он вызывал функцию и преобразовывал результирующий набор всего запроса в заданное число.

С наилучшими пожеланиями Daniel

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Функция может выглядеть так:

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 голосов
/ 21 июля 2011

У вас действительно есть какая-нибудь подстрока для анализа перед преобразованием?

как насчет TO_NUMBER()?это кажется намного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...