Как извлечь число из строки. T-SQL?

Есть строка - "Комиссионное вознаграждение ( 5шт.) за подключение к системе «iBank 2» с применением USB токена" Нужно извлечь цифру - 5. Число штук. ,Чтобы потом использовать в запросе.

Как можно извлечь эту цифру?

Извлечь нужно в отдельный столбец.


Ответы (3 шт):

Автор решения: Konst
    declare @t table (id int, coment_transaction varchar(100));
insert into @t (id, coment_transaction) values(1, 'Комиссионное вознаграждение ( 15шт.) за подключение к системе «iBank 2» с применением USB токена'), (2, 'какой-то товар в количестве 22 шт.');
    
    SELECT x.id, x.coment_transaction, LEFT(x.Val,PATINDEX('%[^0-9]%', x.Val+'!')-1) as [Total]
    from 
        (SELECT 
            t.id,
            t.coment_transaction,
            SUBSTRING(iif(PATINDEX('%шт.%', t.coment_transaction) > 0, left(t.coment_transaction, PATINDEX('%шт.%', t.coment_transaction) - 1), ''), PATINDEX('%[0-9]%', iif(PATINDEX('%шт.%', t.coment_transaction) > 0, left(t.coment_transaction, PATINDEX('%шт.%', t.coment_transaction) - 1), '')), LEN(iif(PATINDEX('%шт.%', t.coment_transaction) > 0, left(t.coment_transaction, PATINDEX('%шт.%', t.coment_transaction) - 1), ''))) Val
            from @t t
        ) x
→ Ссылка
Автор решения: Yitzhak Khabinsky

Пожалуйста, попробуйте следующее решение.

Минимальный воспроизводимый пример не приводится. Поэтому стреляю с бедра.

SQL

-- DDL и пример вставки данных, начало
DECLARE @tbl TABLE (id INT IDENTITY PRIMARY KEY, comment_transaction NVARCHAR(100));
INSERT INTO @tbl (comment_transaction) VALUES
(N'Комиссионное вознаграждение ( 15шт.) за подключение к системе «iBank 2» с применением USB токена'), 
(N'Какой-то товар в количестве 22 шт.');
-- DDL и пример вставки данных, конец

DECLARE @exprToFind NCHAR(3) = N'шт.';

SELECT *
    , RIGHT(comment, PATINDEX('%[^0-9]%', REVERSE(comment)) - 1) AS Result
FROM @tbl
    CROSS APPLY (SELECT CHARINDEX(@exprToFind, comment_transaction)) AS t(pos)
    CROSS APPLY (SELECT TRIM(LEFT(comment_transaction, pos - 1))) AS t1(comment);

Результат

+----+--------------------------------------------------------------------------------------------------+-----+----------------------------------+--------+
| id |                                       comment_transaction                                        | pos |             comment              | Result |
+----+--------------------------------------------------------------------------------------------------+-----+----------------------------------+--------+
|  1 | Комиссионное вознаграждение ( 15шт.) за подключение к системе «iBank 2» с применением USB токена |  33 | Комиссионное вознаграждение ( 15 |     15 |
|  2 | Какой-то товар в количестве 22 шт.                                                               |  32 | Какой-то товар в количестве 22   |     22 |
+----+--------------------------------------------------------------------------------------------------+-----+----------------------------------+--------+
→ Ссылка
Автор решения: Vitaliy Zlobin
DECLARE @myColumn VARCHAR(256) = 'Какие-то 5 пакетов в количестве (22 шт.)'

SELECT SUBSTRING(@myColumn, PATINDEX('%(%шт.)%', @myColumn) + 1, PATINDEX('% шт.)%', @myColumn) - (PATINDEX('%(%шт.)%', @myColumn) + 1)) AS [Кол-во]

псс: переменная @myColumn объявлена для отладки демонстрации, её можно удалить, а вместо неё подставить название вашего столбца

→ Ссылка