sql >> データベース >  >> RDS >> Sqlserver

SQL ServerでISNUMERIC()を使用すると正を返す非数字

    ISNUMERIC() SQL Serverの関数を使用すると、式が数値であるかどうかを確認できます。

    ただし、予期しない結果が得られる場合があります。これは、数値ではない文字を含む式があるが、それでもISNUMERIC()によって受け入れられる場合に発生する可能性があります。 数値として。

    ISNUMERIC()の文字がたくさんあります あなたが数値として考えていなかったかもしれない数値として受け入れます。これには、プラス(+などの文字が含まれます )、マイナス(- )、およびさまざまな通貨記号。また、その配置に応じて、文字e また、式全体を数値として解釈できるようにすることもできます。

    これが私の言いたいことのいくつかの例です:

    SELECT 
      ISNUMERIC('+') AS [+],
      ISNUMERIC('-') AS [-],
      ISNUMERIC('$') AS [$],
      ISNUMERIC('1e2') AS [1e2],
      ISNUMERIC('1e+2') AS [1e+2],
      ISNUMERIC('e') AS [e],
      ISNUMERIC('e+') AS [e+];
    

    結果:

    +-----+-----+-----+-------+--------+-----+------+
    | +   | -   | $   | 1e2   | 1e+2   | e   | e+   |
    |-----+-----+-----+-------+--------+-----+------|
    | 1   | 1   | 1   | 1     | 1      | 0   | 0    |
    +-----+-----+-----+-------+--------+-----+------+
    

    eに注意してください およびe+ 単独の場合は否定的な結果を返しますが、数字で囲まれている場合は肯定的な結果を返します。

    これは、それ自体では数値を表していないためと考えられますが、数値で囲まれていると、式全体が科学的記数法(e)として解釈される可能性があります。 およびe+ 科学的記数法でよく使用されます)。

    数値データ型

    Microsoftのドキュメントによると、ISNUMERIC()のデータ型 数値として認識されるのは、次のものです。

    正確な数値

    • bigint
    • int
    • smallint
    • tinyint
    • ビット

    固定精度

    • 10進数
    • 数値

    概算

    • フロート
    • 本物

    金銭的価値

    • お金
    • smallmoney

    さらに、ISNUMERIC() 数字ではない一部の文字に対して1を返します(上記の例を参照)。これには、プラス(+などの文字が含まれます )、マイナス(- )、およびドル記号($などの有効な通貨記号 )。

    また、例に見られるように、文字e 大きな式の一部である場合、およびその式での配置によっては、結果に影響を与える可能性があります。


    1. SQLServerのカーソルタイプ-静的カーソルのみを転送| SQLServerチュートリアル/TSQLチュートリアル

    2. からOracle11データベースに接続する方法。ネット

    3. 複数のレコードを挿入してID値を取得するにはどうすればよいですか?

    4. HA/DRソリューションの自己妄想を避ける