• How is this for a novel approach?

    DECLARE @Number Float

    SET @Number = 1234.56

    -- Create a string version of the number

    DECLARE @Number_String VarChar(250)

    SET @Number_String = CONVERT(VarChar(250), @Number);

    -- Create a "Common Table Expression" with numbers 0-9 as rows.

    WITH Base (Digit) AS

    (

    SELECT 0 UNION ALL

    SELECT 1 UNION ALL

    SELECT 2 UNION ALL

    SELECT 3 UNION ALL

    SELECT 4 UNION ALL

    SELECT 5 UNION ALL

    SELECT 6 UNION ALL

    SELECT 7 UNION ALL

    SELECT 8 UNION ALL

    SELECT 9

    )

    -- Re-assemble the characters in the reverse order.

    SELECT

    IsNull(MAX(CASE Backwards.Position WHEN 10 THEN Backwards.Number ELSE Null END),'') +

    IsNull(MAX(CASE Backwards.Position WHEN 9 THEN Backwards.Number ELSE Null END),'') +

    IsNull(MAX(CASE Backwards.Position WHEN 8 THEN Backwards.Number ELSE Null END),'') +

    IsNull(MAX(CASE Backwards.Position WHEN 7 THEN Backwards.Number ELSE Null END),'') +

    IsNull(MAX(CASE Backwards.Position WHEN 6 THEN Backwards.Number ELSE Null END),'') +

    IsNull(MAX(CASE Backwards.Position WHEN 5 THEN Backwards.Number ELSE Null END),'') +

    IsNull(MAX(CASE Backwards.Position WHEN 4 THEN Backwards.Number ELSE Null END),'') +

    IsNull(MAX(CASE Backwards.Position WHEN 3 THEN Backwards.Number ELSE Null END),'') +

    IsNull(MAX(CASE Backwards.Position WHEN 2 THEN Backwards.Number ELSE Null END),'') +

    IsNull(MAX(CASE Backwards.Position WHEN 1 THEN Backwards.Number ELSE Null END),'') AS Reverse_Number

    FROM

    (

    SELECT

    -- Select a substring from the current number character position

    SUBSTRING(@Number_String, All_Numbers.Number, 1) AS Number,

    -- The position the substring started at...

    All_Numbers.Number AS Position

    FROM

    (

    -- Create a table query with numbers 1-100,000 as rows

    -- by joining the Base table once for each decimal place...

    SELECT

    D5.Digit * 10000 +

    D4.Digit * 1000 +

    D3.Digit * 100 +

    D2.Digit * 10 +

    D1.Digit + 1 AS Number

    FROM

    Base D1 CROSS JOIN

    Base D2 CROSS JOIN

    Base D3 CROSS JOIN

    Base D4 CROSS JOIN

    Base D5

    ) All_Numbers

    WHERE

    -- Filter off any numbers greater than the length of the string.

    All_Numbers.Number <= LEN(@Number_String)

    ) Backwards