Преобразовать десятичную строку в строку для сравнения в U-SQL

Я пытаюсь преобразовать данные из загруженного в CSV-файл в таблицу Azure, но у меня возникают проблемы, когда одно из значений загружается в строку, а эквивалентное значение в таблице является десятичным.

@ProdOutput = 
    EXTRACT 
    [p_description] string, 
    [p_code] string, 
    [p_price] string, 
    [p_colour] string
FROM "testing/martin/items.csv" 
USING Extractors.Csv(skipFirstNRows:1);  


// @items has been brought in from a table in Data Lake Analytics
@holdings_query = 
    SELECT ROW_NUMBER() OVER (ORDER BY h.code) AS rn, 
       h.description AS Description, 
       h.cd AS Code,    
       h.priceGBP  AS Price,    
       h.col AS Colour
FROM   @items AS h;



@result = 
    SELECT 
    p_description == Description ? p_description : String.Concat("Mismatch", p_description, " !! ", Description)  AS [Desc], 
    p_code == Code ? p_description : String.Concat("Mismatch", p_code, " !! ", Code)  AS [Code], 
    p_price == Price ? p_price: String.Concat("Mismatch", p_price, " !! ", Price)  AS [Price]
FROM @holdings_query AS h
LEFT OUTER JOIN @prod_data AS p ON h.Code == p.p_code;

Проблема в том, что я хочу, чтобы оператор EXTRACT приводил все в общем виде в виде строки, так как я не всегда буду знать тип каждого из столбцов. Поэтому, когда я делаю сравнение в последнем утверждении, я хотел бы преобразовать цену из десятичной (как в таблице) в строку, чтобы сравнить с тем, что выходит из CSV.

Я пробовал ToString(), ToString("G"), (строка?), Но все они выдают ошибки. Что я делаю неправильно?

ТИА Мартин

Пример данных:
Items.csv:
"Элемент1","IT1","3,65"
"Элемент2","IT2","4,00"
"Item3", "IT3", "524,2123"

таблица @items:
"Item1", "IT1", 3,65
"Item2", "IT2", 4,00
"Item3", "IT3", 524.2123

1 ответ

Пытаться Decimal.Parse на string тип. Этот метод "... преобразует строковое представление числа в его десятичный эквивалент". Я получил следующее заявление на работу, где p_price это строковое значение:

@result =
    SELECT 
            Decimal.Parse(p.p_price) == h.Price ? 1 : 0 AS isEqual
...
Другие вопросы по тегам