2017-06-27 19 views
1

これはSQL Server自体のバグです。私の顧客はSQL Server 2012との互換性のためにデータベースを設定することができないので、基本的にtry_convert(datetime, string arg)をエミュレートするという仕事は非常に簡単です。次のようにvarcharをdatetimeに変換するときに変換に失敗しました

私は、関数の開始とテストクエリを抽出:

create function spTryConvertDateTime (@pString varchar(255)) 
returns datetime 
as 
begin 
    declare @iresult datetime = null; 
    declare @string varchar(255) = ltrim(rtrim(isnull(@pString, ''))); 
    declare @datestring varchar(255); 
    declare @timestring varchar(255); 

    if len(@string) < 10 
     return @iresult; 

    set @datestring = left(@string, 10); 

    if len(@string) >= 19 
     set @timestring = substring(@string, 11, len(@string-10)); 

    return null; 
end; 
go 

declare @v varchar(32) = '2017-10-31 00:00:00'; 
select dbo.spTryConvertDateTime(@v); 

私はこれを実行しようとすると、私は次のエラーを取得する:

Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value '2017-10-31 00:00:00' to data type int.

???何かをデータ型intに変換しようとしていますか?

何が起こっていますか?私は何が欠けていますか?

答えて

1

あなたは深い機能でこのコードを持っている:

len(@string-10) 

(これはreturn NULL前の最後の行の終わりである。)

あなたは文字列から10を減算することはできません。したがって、整数に変換しようとしています。

+0

DOH!ありがとうございます - 私はこれを見て、それを見ていないどのくらいの時間を知らない。 –

関連する問題