2017-09-24 7 views
0

エラー:「エラー:varchar値'10 .8」をデータ型に変換するときに変換に失敗しました。エラー:varchar値'10 .8 'をデータ型に変換するときに変換に失敗しました

私はこのクエリをAzureデータウェアハウスに書いています。 何が間違っている可能性があります私はIntに変換していません。

Location: '/2016/yellow_tripdata_2016-07.csv' Column ordinal: 17, Expected data type: VARCHAR(50) collate SQL_Latin1_General_CP1_CI_AS, Offending value: VendorID,tpep_pickup_datetime,tpep_dropoff_datetime,passenger_count,trip_distance,RatecodeID,store_and_fwd_flag,PULocationID,DOLocationID,payment_type,fare_amount,extra,mta_tax,tip_amount,tolls_amount,improvement_surcharge,total_amount (Tokenization failed), Error: Not enough columns in this line. 
    Location: '/2016/yellow_tripdata_2016-10.csv' Column ordinal: 17, Expected data type: VARCHAR(50) collate SQL_Latin1_General_CP1_CI_AS, Offending value: VendorID,tpep_pickup_datetime,tpep_dropoff_datetime,passenger_count,trip_distance,RatecodeID,store_and_fwd_flag,PULocationID,DOLocationID,payment_type,fare_amount,extra,mta_tax,tip_amount,tolls_amount,improvement_surcharge,total_amount (Tokenization failed), Error: Not enough columns in this line. 
    Location: '/2016/yellow_tripdata_2016-11.csv' Column ordinal: 17, Expected data type: VARCHAR(50) collate SQL_Latin1_General_CP1_CI_AS, Offending value: VendorID,tpep_pickup_datetime,tpep_dropoff_datetime,passenger_count,trip_distance,RatecodeID,store_and_fwd_flag,PULocationID,DOLocationID,payment_type,fare_amount,extra,mta_tax,tip_amount,tolls_amount,improvement_surcharge,total_amount (Tokenization failed), Error: Not enough columns in this line. 
    Location: '/2016/yellow_tripdata_2016-09.csv' Column ordinal: 17, Expected data type: VARCHAR(50) collate SQL_Latin1_General_CP1_CI_AS, Offending value: VendorID,tpep_pickup_datetime,tpep_dropoff_datetime,passenger_count,trip_distance,RatecodeID,store_and_fwd_flag,PULocationID,DOLocationID,payment_type,fare_amount,extra,mta_tax,tip_amount,tolls_amount,improvement_surcharge,total_amount (Tokenization failed), Error: Not enough columns in this line. 
    Location: '/2016/yellow_tripdata_2016-08.csv' Column ordinal: 17, Expected data type: VARCHAR(50) collate SQL_Latin1_General_CP1_CI_AS, Offending value: VendorID,tpep_pickup_datetime,tpep_dropoff_datetime,passenger_count,trip_distance,RatecodeID,store_and_fwd_flag,PULocationID,DOLocationID,payment_type,fare_amount,extra,mta_tax,tip_amount,tolls_amount,improvement_surcharge,total_amount (Tokenization failed), Error: Not enough columns in this line. 
    Location: '/2016/yellow_tripdata_2016-12.csv' Column ordinal: 17, Expected data type: VARCHAR(50) collate SQL_Latin1_General_CP1_CI_AS, Offending value: VendorID,tpep_pickup_datetime,tpep_dropoff_datetime,passenger_count,trip_distance,RatecodeID,store_and_fwd_flag,PULocationID,DOLocationID,payment_type,fare_amount,extra,mta_tax,tip_amount,tolls_amount,improvement_surcharge,total_amount (Tokenization failed), Error: Not enough columns in this line. 
+0

あなたの 'total_amount'列は**どのデータ型**ですか? –

+0

varchar(50)NULLです。 –

答えて

2

ここに行く:

select 
    cast(
    case 
     when [total_amount] is null then 0 
     when [total_amount] = '' then 0 
     else [total_amount] 
    end 
    as decimal(10,4) 
) 
    FROM [dbo].[ABC] 

このクエリは、外部表から拒否され 6行はクエリ実行の計画手順2で[NYCTaxiData]エラーを報告している外部のテーブルクエリです

DECLARE @N VARCHAR(MAX) = '10.8'; 

SELECT total_amount = CASE 
         WHEN @N IS NULL THEN 0 
         WHEN @N = '' then 0 
         ELSE 
         CAST(@N AS DECIMAL(10,4)) 
END 

元のコードでの問題は、の式のデータ型がであることです。それはvarcharintvarcharよりhigher datatype precedenceを持ってを返す整数定数0と1の枝を返す二つの枝を持っているので、

です。

したがって、最初に文字列'10.8'を暗黙的にキャストして、intとして失敗します。

varcharの上に書き直しを行うと、今度はdecimal(10,4)になります。これは、intよりも高い優先順位であり、CASE式のデータ型は全体としてdecimal(10,4)になり、問題はありません。

結果:

+==============+ 
| total_amount | 
+==============+ 
|  10,8000 | 
+--------------+ 

Demo

関連する問題