2016-12-08 9 views
1

I持って次のコード:変換が失敗した

私はvarchar型の値を変換する際

変換が失敗したエラーを取得するしかし

declare @StartDate date 
declare @EndDate date 

set @StartDate='09/01/2016' 
set @EndDate='11/30/2016' 

SELECT 
    1 AS Segment, 
    'C' AS Subsegment, 
    100 AS Ent, 
    'KPAR' AS LOB, 
    'ATLB' AS Cov, 
    ClaimNumber AS [Claim#], 
    '12/31/'+AccidentYear AS AYDate, 
    convert(date, cast(AccountingPeriodDate as date),101) AS EvalDate 

'12/31/'をデータ型intに変換します。

私はこのエラーを以前には受けていませんでしたが、それはデータ型の変更によるものです。

+0

私はAccidentYear'がint 'と仮定しています。その列に12/31 /を追加しようとしています。 'CONCAT()'を使うか、AccidentYearをvarcharとしてキャストしてください – Doolius

+0

あなたの質問には、使用しているデータベース(おそらくSQL Server)にタグを付けてください。 –

答えて

1

はおそらくこれを試してVARCHAR

DECLARE @accidentyear AS INT 
SET @accidentyear = 2016 

SELECT '12/31/' + CAST(@accidentyear AS VARCHAR(4)) 
1

としてaccidentyearキャストする必要があります。

SELECT 1 AS Segment 
     ,'C' AS Subsegment 
     ,100 AS Ent 
     ,'KPAR' AS LOB 
     ,'ATLB' AS Cov 
     ,ClaimNumber AS [Claim#] 
     ,'12/31/'+ CAST(AccidentYear as nvarchar(4)) AS AYDate 
     ,convert(date, cast(AccountingPeriodDate as date),101) AS EvalDate 
2

まず、あなたは、このようなYYYYMMDDとYYYY-MM-DDとして、ISO標準の日付形式を使用する必要があります。

次に、変換について明示してtry_convert()を使用してください。自動的に日付に数値を変換します

select try_convert(date, concat(accident_year, '1231')) 

concat():だから、私はこのように書きます。

はあるいは、datefromparts()を使用します。

select datefromparts(accident_year, 12, 31) 

これはおそらく最も簡単な解決策です。

0

他のユーザーからaccidentYearをvarcharにキャスト/変換するアドバイスが正しいです。これが必要な理由は、データ型が同じでないためです。 '12/31 'は明らかに文字列です。また、エラーメッセージがintであることを示すため、AccidentYearはintであることもわかります。

データ型が異なるため、SQL Serverは暗黙のデータ型変換を試みます。 SQL Serverがこれを行うと、文字列は整数に変換され、数式が実行されます。

暗黙的な変換は不可能なので、代わりに明示的な変換を使用する必要があります。キャストまたは変換関数を使用すると、明示的な変換を行っています。暗黙的なデータ型変換のための

ルールはここで見つけることができます:https://msdn.microsoft.com/en-us/library/ms190309.aspx?f=255&MSPPError=-2147217396

関連する問題