2013-10-10 3 views
0

У меня есть плоский файл с нижеследующим списком сумм, не могли бы вы рассказать мне, как я могу сделать этот ниже список суммы в двухточечное десятичное значение примерно как 1234567.80, которые заканчиваются с {, A, H, E, C, I, F с помощью SQL?Преобразование varchars в две точки Десятичное значение с помощью SQL

12345678{ 
00484326A 
00000210H 
00000185A 
00000077E 
00000833C 
00000255I 
00000077E 
00000039F 
00000088A 
00000000F 
00000000A 
00000100{ 

Спасибо,

+0

Не могу написать это для вас прямо сейчас, но попробуйте SUBSTRING и CASE. –

+0

Я могу сделать подстроку, но, я должен знать, почему каждое значение заканчивается конкретным charector. Я думаю, что будет причина знать. –

+0

eequalsmcaputo предоставил вам часть CASE. –

ответ

1

Попробуйте это как with this SQLfiddle. Не очень, но это работает

SELECT 
    CAST(
     CONCAT(SUBSTRING(test_value,1, LENGTH(test_value) -2), 
       '.', 
       SUBSTRING(test_value, LENGTH(test_value) -1, 1)) 
    AS DECIMAL(7,1)) 
FROM TEST 
WHERE SUBSTRING(test_value, LENGTH(test_value)) = 'A' 
|| SUBSTRING(test_value, LENGTH(test_value)) = 'H' 
-- keep adding above line for the rest of the ending characters you want 
1

Я написал это как функция, потому что я думаю, что легче читать, чем встроенный код:

create function dbo.convert_amount_str (@amount_str varchar(50)) 
returns money 
as 
begin 
declare @char_index int 
declare @amount money 
declare @char varchar(50) 
declare @decimal money 

-- Match the first non-numeric character 
select @char_index = PATINDEX('%[^0-9]%', @amount_str) 

-- Get the numeric characters into a numeric variable 
select @amount = convert(money, SUBSTRING(@amount_str, 0, @char_index)) 

-- Get the non-numeric character (will work for multiple characters) 
select @char = SUBSTRING(@amount_str, @char_index, (len(@amount_str) - @char_index) + 1) 

-- Convert the non-numeric characters into decimal amounts 
select @decimal = case @char 
    when 'A' then .8 -- whatever this should equate to 
    when 'H' then .7 -- whatever this should equate to 
    -- output for remaining characters 
    end 

return @amount + @decimal 
end 

Тогда просто использовать его как это:

select dbo.convert_amount_str('00484326A') 

Или, более вероятно, ссылка на любой столбец содержит числовые строковые значения.

Смежные вопросы