SQLは、次の文字列を検出していますISNUMERIC
。
'07213E71'
これは、「E」が数学記号として分類されているためだと思います。
ただし、整数である値のみがTrueとして返されるようにする必要があります。
これどうやってするの?
SQLは、次の文字列を検出していますISNUMERIC
。
'07213E71'
これは、「E」が数学記号として分類されているためだと思います。
ただし、整数である値のみがTrueとして返されるようにする必要があります。
これどうやってするの?
07213E71
71 個のゼロを持つ浮動小数点数 7213 です。
これを使用しISNUMERIC(myValue + '.0e0')
て整数全体をテストできます。少し不可解ですが、機能します。
もう 1 つのテストは、myValue NOT LIKE '%[^0-9]%'
0 ~ 9 の数字のみを許可する二重否定です。
ISNUMERIC には、これらすべてが 1 を返すという他の問題があり+
ます-
。
ドキュメントにはそれが書かれています
ISNUMERICは、入力式が有効な整数、浮動小数点数、金額、または10進数型に評価されると1を返します。それ以外の場合は0を返します。戻り値1は、式をこれらの数値型の1つに変換できることを保証します。
数値も浮動小数点(指数表記)であるため、ISINTEGERを使用する唯一の方法は、SQLで自分で数値を定義することです。次のリンクをお読みください。
http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html
エキストラ:
つまるところ: これは完全な整数です。と同等7213 * 10 ^ 71
です。
私は同じ問題に遭遇しました。IsNumeric は「$、€、+、- など」を有効な入力として受け入れ、Convert 関数はこれによりエラーをスローします。「LIKE」SQLステートメントを使用すると、問題が解決しました。それが他の人に役立つことを願っています
SELECT UnitCode, UnitGUID, Convert(int, UnitCode) AS IntUnitCode
FROM [NG_Data].[NG].[T_GLB_Unit]
WHERE ISNULL(UnitType,'') <>'Department'
AND UnitCode NOT LIKE '%[^0-9]%'
ORDER BY IntUnitCode
PS:「UnitCode」を nvarchar として使用したことで私を責めないでください:)これは古いプロジェクトです:)
使用する言語に関係なく、データベースへの呼び出しからそれを確認してから、値をクエリに渡す必要があります。おそらくSQLはその値を文字列として理解しています。