最近、SQL ServerでISNUMERICを使用していましたが、問題が発生したときにこのコードスニペットが見つかりました。なぜISNUMERIC( '。')は1を返しますか?
SELECT ISNUMERIC('.')
これは、trueの場合と同様に1を返します。falseの場合は0を返しませんか?
最近、SQL ServerでISNUMERICを使用していましたが、問題が発生したときにこのコードスニペットが見つかりました。なぜISNUMERIC( '。')は1を返しますか?
SELECT ISNUMERIC('.')
これは、trueの場合と同様に1を返します。falseの場合は0を返しませんか?
IsNumeric() Broken? Only up to a pointを参照してください。
SELECT CAST('.' AS MONEY)
戻り0.00
(キャストint
とfloat
で失敗が)
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
およびが導入されました。
。滑らかな斜面を考えてみましょう: '10'は大丈夫です、' 10.0'は大丈夫です、 '10.'は大丈夫です...(_starting to slide_)ので、' .1'はOKで、 '.0'と..はい。「。」も大丈夫です。 [入力解析に寛大である](https://plus.google.com/114034641416688387662/posts/8bJZnLFxAfi)は、時には不利な点があります。 – sehe
ありがとう、デナリ! –
"。" 10進数で使用されています!
は用here
ISNUMERICを参照してください ' - ' & ''なぜisnumeric( ' - ')& isnumeric( '。')は を返しますか?
回答: " - "は負の値で、 "。"小数点以下は、 の数字で使用されます。私はなぜ彼らがそれをISNUMERICという名前にしたのか分からない。それらは にISNUMBERRELATEDという名前を付ける必要があります。
私はさらに情報がここにあります、それはまた、数値などの他の非数値フィールドの数を解釈だと思う -
http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html
いいえ。 1.1は数値です。 ISNUMERIC())は非常に基本的なものであり、ダムとも言えるかもしれません...したがって、ピリオド数値を考慮します。そのために –
'、'も正しく動作します(多くのロケールでは小数点として使用しています) – Unsliced