Extracting dollar amounts from existing sql data?

前端 未结 2 911
执笔经年
执笔经年 2020-12-20 08:49

I have a field with that contains a mix of descriptions and dollar amounts. With TSQL, I would like to extract those dollar amounts, then insert them into a new field for t

相关标签:
2条回答
  • 2020-12-20 09:38
        CREATE FUNCTION dbo.fnGetAmounts(@str nvarchar(max))
        RETURNS TABLE 
        AS
        RETURN 
        (
        -- generate all possible starting positions ( 1 to len(@str))
        WITH StartingPositions AS
        (
            SELECT 1 AS Position
            UNION ALL
            SELECT Position+1
            FROM StartingPositions
            WHERE Position <= LEN(@str)
        )
       -- generate possible lengths
        , Lengths AS
        (
            SELECT 1 AS [Length]
            UNION ALL
            SELECT [Length]+1
            FROM Lengths
            WHERE [Length] <= 15
        )
        -- a Cartesian product between StartingPositions and Lengths
        -- if the substring is numeric then get it
        ,PossibleCombinations AS 
        (
    
             SELECT CASE                
                    WHEN ISNUMERIC(substring(@str,sp.Position,l.Length)) = 1 
                       THEN substring(@str,sp.Position,l.Length)         
                     ELSE null END as Number
                     ,sp.Position
                     ,l.Length
             FROM StartingPositions sp, Lengths l           
             WHERE sp.Position <= LEN(@str)            
        )
    -- get only the numbers that start with Dollar Sign, 
    -- group by starting position and take the maximum value 
    -- (ie, from $, $2, $20, $200 etc)
        SELECT MAX(convert(money, Number)) as Amount
        FROM PossibleCombinations
        WHERE Number like '$%' 
        GROUP BY Position
        )
    
        GO
    
        declare @str nvarchar(max) = 'Used knife set for sale $200.00 or best offer.
        $4,500 Persian rug for sale.
        Today only, $100 rebate.
        Five items for sale: $20 Motorola phone car charger, $150 PS2, $50.00 3 foot high shelf.'
    
        SELECT *
        FROM dbo.fnGetAmounts(@str)
        OPTION(MAXRECURSION 32767) -- max recursion option is required in the select that uses this function
    
    0 讨论(0)
  • 2020-12-20 09:50

    This link should help.

    http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/extracting-numbers-with-sql-server

    Assuming you are OK with extracting the numeric's, regardless of wether or not there is a $ sign. If that is a strict requirement, some mods will be needed.

    0 讨论(0)
提交回复
热议问题