SQL извлечь значение с плавающей точкой из строки? - PullRequest
0 голосов
/ 08 ноября 2019

Есть ли способ изолировать значение с плавающей запятой от строки непосредственно в SQL Server?

Я пробовал решение из Извлечь число с плавающей запятой из строкового / текстового SQL Server , но безрезультатно. Очень признателен!

SELECT strCondition, Amount1, Amount2, Amount3
FROM Datatable
WHERE Date >= '2018-04-01'
ORDER BY Date ASC

Текущие выходные данные strCondition похожи на:

"2.8, TEXT", "TEXT, 2.8", "TEXT 2.8"

и другие варианты.

Как бы получить еговыводить только "2,8"?

Ответы [ 2 ]

2 голосов
/ 08 ноября 2019

То, что вам нужно, не на 100% ясно, но я знаю, что вы можете использовать PatternSplitCM для этого типа вещей:

Это:

DECLARE @string VARCHAR(8000) = '"2.8, TEXT", "TEXT, 2.8", "TEXT 2.8"';

SELECT s.Item
FROM   dbo.PatternSplitCM(@string,'[0-9.]') AS s
WHERE  s.[Matched] = 1 AND TRY_CAST(s.item AS FLOAT) IS NOT NULL;

Возвращает:

Item
-------
2.8
2.8
2.8

Вы можете добавить ТОП (1), чтобы получить первый, если он вам нужен.

Это:

DECLARE @datatable TABLE (dID INT IDENTITY, strCondition VARCHAR(1000));
INSERT @datatable(strCondition) 
VALUES ('Sometext... blah blah... 20191108 blah blah...'),('"More stuff 22.44","ggooggoo"');

SELECT d.strCondition, Item
FROM   @datatable AS d
CROSS APPLY
(
  SELECT TOP(1) s.Item
  FROM     dbo.PatternSplitCM(d.strCondition,'[0-9.]') AS s
  WHERE  s.[Matched] = 1 AND TRY_CAST(s.item AS FLOAT) IS NOT NULL
  ORDER BY ItemNumber
) AS s;

Возвращается:

strCondition                                            Item
------------------------------------------------------- ---------
Sometext... blah blah... 20191108 blah blah...          20191108
"More stuff 22.44","ggooggoo"                           22.44
0 голосов
/ 08 ноября 2019

Если вы не против преобразования в ДЕНЬГИ (4 знака после запятой), который немного более простителен

Пример

Declare @YourTable Table ([ID] varchar(50),[SomeCol] varchar(50))  Insert Into @YourTable Values 
 (1,'2.8, TEXT')
,(2,'TEXT, 2.8')
,(3,'TEXT 2.8')

Select A.*
      ,SomeVal = try_convert(money,value) 
 from @YourTable A
 Cross Apply string_split(SomeCol,' ') B
 Where try_convert(money,value) is not null

Возвращает

ID  SomeCol     SomeVal
1   2.8, TEXT   2.80
2   TEXT, 2.8   2.80
3   TEXT 2.8    2.80
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...