6

PRINT CONVERT(NUMERIC(18,0), '')

を生成します Error converting data type varchar to numeric.

でも、

PRINT CONVERT(INT, '')

0エラーなしで生成 します。

質問:これにはSQL Serverフラグがありますか、それともすべてのvarcharから数値への変換に対してcaseステートメントを実行する必要がありますか?(明らかな理由は別として?)

4

3 に答える 3

8

ISNUMERICを使用する

declare @a varchar(20)
set @a = 'notanumber'
select case when isnumeric(@a) = 0 then 0 else convert(numeric(18,0),@a) end
于 2009-11-27T18:37:58.353 に答える
2

空の文字列は、float型とint型ではゼロに変換されますが、10進数では変換されません。(そして、日時=ゼロの場合は1900年1月1日に変換されます)。理由はわかりません..それは...

decimal(18,0)が必要な場合は、代わりにbigintを使用してください。または最初にフロート経由でキャスト

ISNUMERICは-and.1.2E3数値として受け入れますが、すべて10進数に変換できません。

于 2009-11-28T09:58:47.617 に答える
2

ISNUMERICは、期待どおりに機能するとは限りません。特に、後で数値に変換できない値についてはTrueを返します。

この記事では、この問題について説明し、UDFでこの問題を回避する方法を提案します。

于 2009-11-28T12:33:40.910 に答える