Как извлечь число из строки. 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 объявлена для отладки демонстрации, её можно удалить, а вместо неё подставить название вашего столбца