12

SQLは、次の文字列を検出していますISNUMERIC

'07213E71'

これは、「E」が数学記号として分類されているためだと思います。

ただし、整数である値のみがTrueとして返されるようにする必要があります。

これどうやってするの?

4

5 に答える 5

21

07213E7171 個のゼロを持つ浮動小数点数 7213 です。

これを使用しISNUMERIC(myValue + '.0e0')て整数全体をテストできます。少し不可解ですが、機能します。

もう 1 つのテストは、myValue NOT LIKE '%[^0-9]%'0 ~ 9 の数字のみを許可する二重否定です。

ISNUMERIC には、これらすべてが 1 を返すという他の問題があり+ます-

于 2011-05-13T08:03:15.687 に答える
1

ドキュメントにはそれが書かれています

ISNUMERICは、入力式が有効な整数、浮動小数点数、金額、または10進数型に評価されると1を返します。それ以外の場合は0を返します。戻り値1は、式をこれらの数値型の1つに変換できることを保証します。

数値も浮動小数点(指数表記)であるため、ISINTEGERを使用する唯一の方法は、SQLで自分で数値を定義することです。次のリンクをお読みください。

http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html

エキストラ:

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=59049

http://www.tek-tips.com/faqs.cfm?fid=6423

于 2011-05-13T08:04:30.933 に答える
1

つまるところ: これは完全な整数です。と同等7213 * 10 ^ 71です。

于 2011-05-13T08:02:31.753 に答える
0

私は同じ問題に遭遇しました。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 として使用したことで私を責めないでください:)これは古いプロジェクトです:)

于 2013-06-12T09:28:30.770 に答える
-4

使用する言語に関係なく、データベースへの呼び出しからそれを確認してから、値をクエリに渡す必要があります。おそらくSQLはその値を文字列として理解しています。

于 2011-05-13T08:04:32.733 に答える