2011-09-13 13 views
11

最近、SQL ServerでISNUMERICを使用していましたが、問題が発生したときにこのコードスニペットが見つかりました。なぜISNUMERIC( '。')は1を返しますか?

SELECT ISNUMERIC('.') 

これは、trueの場合と同様に1を返します。falseの場合は0を返しませんか?

+0

いいえ。 1.1は数値です。 ISNUMERIC())は非常に基本的なものであり、ダムとも言えるかもしれません...したがって、ピリオド数値を考慮します。そのために –

+2

'、'も正しく動作します(多くのロケールでは小数点として使用しています) – Unsliced

答えて

16

IsNumeric() Broken? Only up to a pointを参照してください。

SELECT CAST('.' AS MONEY) 

戻り0.00(キャストintfloatで失敗が)

ISNUMERICはちょうど値は、一般的に役に立たない数値データ型のいずれかにキャストすることができることを確認します。通常、特定のタイプにキャストできるかどうかを知りたいとします。

Additionally it doesn't even seem to do that task correctly for all possible inputs.ISNUMERIC(' ')は、intとmoneyの両方に正常にキャストできても、0を返します。逆にISNUMERIC(N'8')1を返しますが、試したものには正常にキャストできません。

ここで便利なヘルパー関数はIsNumeric, IsInt, IsNumberです。

SQL Server 2012では、これを大きく支援するTRY_PARSEおよびが導入されました。

+3

。滑らかな斜面を考えてみましょう: '10'は大丈夫です、' 10.0'は大丈夫です、 '10.'は大丈夫です...(_starting to slide_)ので、' .1'はOKで、 '.0'と..はい。「。」も大丈夫です。 [入力解析に寛大である](https://plus.google.com/114034641416688387662/posts/8bJZnLFxAfi)は、時には不利な点があります。 – sehe

+0

ありがとう、デナリ! –

1

"。" 10進数で使用されています!

は用here

ISNUMERICを参照してください ' - ' & ''なぜisnumeric( ' - ')& isnumeric( '。')は を返しますか?

回答: " - "は負の値で、 "。"小数点以下は、 の数字で使用されます。私はなぜ彼らがそれをISNUMERICという名前にしたのか分からない。それらは にISNUMBERRELATEDという名前を付ける必要があります。

関連する問題