2
特定の特殊文字のISNUMERICの背後にあるロジックは何ですか?
このISNUMERIC関数には予期しない動作があります。MSDNドキュメントには次のように書かれています。 ISNUMERIC入力式が有効な数値データ型に評価されると1を返します。有効な数値データ型には、int、bigint、smallint、tinyint、decimal、numeric、money、smallmoney、float、realが含まれます。 また、脚注もあります。 ISNUMERICプラス(+)、マイナス(-)などの数字ではない一部の文字、およびドル記号($)などの有効な通貨記号に対して1を返します。通貨記号の完全なリストについては、「money and smallmoney(Transact-SQL)」を参照してください。 わかりましたので+、-、と記載されている通貨記号は、数値と見なされることが期待されます。ここまでは順調ですね。 奇妙な部分です。まず、リンクされた記事の通貨記号の一部は数値ではありません。 ユーロ通貨記号、16進数20A0: ₠ ナイラサイン、ヘックス20A6: ₦ リアルサイン、16進FDFC: ﷼ これは奇妙で、なぜなのかわかりませんか?このバージョンまたは環境に依存していますか? しかし、物事は奇妙になります。私が説明できない他のいくつかはここにあります: /数値ではありませんが、\です(ハァッ!!) REPLICATE(N'9', 308)数値ですが、そうでREPLICATE(N'9', 309)はありません 最初の最も基本的な質問は、上記のケースを説明するものは何ですか?さらに重要なことですが、背後ISNUMERICにあるロジックは何ですか?したがって、すべてのケースを自分で説明/予測できますか? 物を再現する良い方法は次のとおりです。 DECLARE @tbl TABLE(txt NVARCHAR(1000)); INSERT INTO @tbl (txt) VALUES (N''), (N' '), (N'€'), (N'$'), (N'$$'), (NCHAR(8356)), (NCHAR(8352)), (NCHAR(8358)), (NCHAR(65020)), (N'+'), (N'-'), (N'/'), (N'\'), (N'_'), (N'e'), (N'1e'), (N'e1'), (N'1e1'), …