Convert number to words - first, second, third and so on

前端 未结 5 1274
清酒与你
清酒与你 2020-12-09 12:43

Does anyone know how if it\'s possible to take an integer variable in SQL and convert it to the equivilent number of the form: First, Second, Third, Fourth etc?

Than

5条回答
  •  悲&欢浪女
    2020-12-09 13:19

    You need to use a CASE statement:

    SELECT intfield CASE WHEN 1 THEN 'First'
                         WHEN 2 THEN 'Second'
                         WHEN 3 THEN 'Third'
                         ...other conversions...
                         ELSE '' END
    FROM Mytable
    

    EDIT:

    Working code for 3 character numbers below. You can add the needed code below it for 2 and 1 character numbers (basically just modify what I wrote and change the SUBSTRINGs accordingly).

    Essentially it converts the number to a string, checks how many numbers there are, then breaks it down accordingly.

    DECLARE @n int = 515
    
    DECLARE @v varchar(100) = CAST(@N as varchar)
    
    SELECT CASE WHEN LEN(@v) = 3 THEN 
        (CASE   WHEN LEFT(@v, 1) = 1 THEN 'One Hundred'
                WHEN LEFT(@v, 1) = 2 THEN 'Two Hundred'
                WHEN LEFT(@v, 1) = 3 THEN 'Three Hundred'
                WHEN LEFT(@v, 1) = 4 THEN 'Four Hundred'
                WHEN LEFT(@v, 1) = 5 THEN 'Five Hundred'
                WHEN LEFT(@v, 1) = 6 THEN 'Six Hundred'
                WHEN LEFT(@v, 1) = 7 THEN 'Seven Hundred'
                WHEN LEFT(@v, 1) = 8 THEN 'Eight Hundred'
                WHEN LEFT(@v, 1) = 9 THEN 'Nine Hundred'
                ELSE '' END)
        + ' ' +
        (CASE   WHEN SUBSTRING(@v, 2, 1) = 2 THEN 'Twenty'
                WHEN SUBSTRING(@v, 2, 1) = 3 THEN 'Thirty'
                WHEN SUBSTRING(@v, 2, 1) = 4 THEN 'Forty'
                WHEN SUBSTRING(@v, 2, 1) = 5 THEN 'Fifty'
                WHEN SUBSTRING(@v, 2, 1) = 6 THEN 'Sixty'
                WHEN SUBSTRING(@v, 2, 1) = 7 THEN 'Seventy'
                WHEN SUBSTRING(@v, 2, 1) = 8 THEN 'Eighty'
                WHEN SUBSTRING(@v, 2, 1) = 9 THEN 'Ninety'
                WHEN SUBSTRING(@v, 2, 1) = 1 THEN 
                    CASE    WHEN SUBSTRING(@v, 2, 2) = 10 THEN 'Ten'
                            WHEN SUBSTRING(@v, 2, 2) = 11 THEN 'Eleven'
                            WHEN SUBSTRING(@v, 2, 2) = 12 THEN 'Twelve'
                            WHEN SUBSTRING(@v, 2, 2) = 13 THEN 'Thirteen'
                            WHEN SUBSTRING(@v, 2, 2) = 14 THEN 'Fourteen'
                            WHEN SUBSTRING(@v, 2, 2) = 15 THEN 'Fifteen'
                            WHEN SUBSTRING(@v, 2, 2) = 16 THEN 'Sixteen'
                            WHEN SUBSTRING(@v, 2, 2) = 17 THEN 'Seventeen'
                            WHEN SUBSTRING(@v, 2, 2) = 18 THEN 'Eighteen'
                            WHEN SUBSTRING(@v, 2, 2) = 19 THEN 'Nineteen'
                            ELSE '' END
    
    
    
    
                ELSE '' END)
        + ' ' +
        (CASE   WHEN SUBSTRING(@v, 2, 1) = 1 THEN ''
                WHEN SUBSTRING(@v, 3, 1) = 2 THEN 'Two'
                WHEN SUBSTRING(@v, 3, 1) = 3 THEN 'Three'
                WHEN SUBSTRING(@v, 3, 1) = 4 THEN 'Four'
                WHEN SUBSTRING(@v, 3, 1) = 5 THEN 'Five'
                WHEN SUBSTRING(@v, 3, 1) = 6 THEN 'Six'
                WHEN SUBSTRING(@v, 3, 1) = 7 THEN 'Seven'
                WHEN SUBSTRING(@v, 3, 1) = 8 THEN 'Eight'
                WHEN SUBSTRING(@v, 3, 1) = 9 THEN 'Nine'
                WHEN SUBSTRING(@v, 3, 1) = 1 THEN 'One'
                ELSE '' END)
        END
    

提交回复
热议问题