差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
database:sqlserver:hex_is_numeric [2009/09/08 14:36] – j ともやんdatabase:sqlserver:hex_is_numeric [2019/05/18 02:23] (現在) – 外部編集 非ログインユーザー
行 1: 行 1:
-====== ISNUMERIC関数は16進文字列を正しくチェックでき場合がある ====== +====== ISNUMERIC関数は16進文字列を数値と見場合がある ====== 
-<code sql>+ '1E34' のように数字の後に'E'が一つだけ含まれる場合、ISNUMERIC関数は 1 を返してしまう。(恐らく指数と判定している。期待した動作にならない。) 
 +<code tsql>
 DECLARE @HexVal VARCHAR(4) DECLARE @HexVal VARCHAR(4)
 SET @HexVal = '1E34' SET @HexVal = '1E34'
行 18: 行 19:
 varchar の値 '1E34' をデータ型 int に変換できませんでした。 varchar の値 '1E34' をデータ型 int に変換できませんでした。
 </code> </code>
 + 'E234' は期待した動作になる。\\
 +<code tsql>
 +DECLARE @HexVal VARCHAR(4)
 +SET @HexVal = 'E234'
 +
 +IF ISNUMERIC(@HexVal) = 1
 +BEGIN
 + SELECT CAST(@HexVal AS INT)
 +END
 +ELSE
 +BEGIN
 + PRINT '数値以外です。(' + @HexVal + ')'
 +END
 +</code>
 +実行結果:
 +<code>
 +数値以外です。(E234)
 +</code>
 +\\
 + LIKEでチェックすると正しく判定できる。\\
 +<code tsql>
 +DECLARE @HexVal VARCHAR(4)
 +SET @HexVal = '1E34'
 +
 +IF CASE WHEN @HexVal LIKE'%[A-F]%' THEN 0 ELSE 1 END = 1
 +BEGIN
 + SELECT CAST(@HexVal AS INT)
 +END
 +ELSE
 +BEGIN
 + PRINT '数値以外です。(' + @HexVal + ')'
 +END
 +</code>
 +実行結果:
 +<code>
 +数値以外です。(1E34)
 +</code>
 +
  • database/sqlserver/hex_is_numeric.1252388201.txt.gz
  • 最終更新: 2019/05/18 02:23
  • (外部編集)