64

varchar が数値かどうかを調べる簡単な方法はありますか?

例:

abc123 --> 番号なし

123 --> はい、数字です

ありがとう :)

4

11 に答える 11

143

ISNUMERICは機能しません。これは、文字列を任意の数値タイプに変換できることを示しています。これは、ほとんどの場合、知っておくべき無意味な情報です。たとえば、ISNUMERICによると、次のすべては数値です。

£、$、0d0

数字と数字のみをチェックする場合は、負のLIKE式が必要です。

not Value like '%[^0-9]%'
于 2011-01-05T11:10:27.363 に答える
35

ISNUMERIC で十分です

記事のNOTESセクションもチェックしてください。

于 2011-01-05T11:03:40.383 に答える
29

このように確認できます

declare @vchar varchar(50)
set @vchar ='34343';
select case when @vchar not like '%[^0-9]%' then 'Number' else 'Not a Number' end
于 2011-01-05T11:09:49.513 に答える
21

SQL Server 2012 以降を使用すると、特定のニーズがある場合に TRY_* 関数を使用できます。例えば、

-- will fail for decimal values, but allow negative values
TRY_CAST(@value AS INT) IS NOT NULL 

-- will fail for non-positive integers; can be used with other examples below as well, or reversed if only negative desired
TRY_CAST(@value AS INT) > 0

-- will fail if a $ is used, but allow decimals to the specified precision
TRY_CAST(@value AS DECIMAL(10,2)) IS NOT NULL 

-- will allow valid currency
TRY_CAST(@value AS MONEY) IS NOT NULL  

-- will allow scientific notation to be used like 1.7E+3
TRY_CAST(@value AS FLOAT) IS NOT NULL 
于 2016-03-18T14:55:46.410 に答える
9

小数値を許可する必要が生じたので、使用しましたnot Value like '%[^0-9.]%'

于 2014-12-01T18:20:05.100 に答える
1
DECLARE @A nvarchar(100) = '12'
IF(ISNUMERIC(@A) = 1)
BEGIN
    PRINT 'YES NUMERIC'
END
于 2015-11-03T05:52:27.747 に答える
1

ネイザンのコードでは、値に「.」のみを使用できます。終えた。AND衒学的になりすぎるリスクを冒して、もう 1 つの節を追加しました。

declare @MyTable table(MyVar nvarchar(10));
insert into @MyTable (MyVar) 
values 
    (N'1234')
    , (N'000005')
    , (N'1,000')
    , (N'293.8457')
    , (N'x')
    , (N'+')
    , (N'293.8457.')
    , (N'......')
    , (N'.')
    ;

-- This shows that Neizan's answer allows "." to slip through.
select * from (
    select 
        MyVar
        , case when MyVar not like N'%[^0-9.]%' then 1 else 0 end as IsNumber 
    from 
        @MyTable
) t order by IsNumber;

-- Notice the addition of "and MyVar not like '.'".
select * from (
    select 
        MyVar
        , case when MyVar not like N'%[^0-9.]%' and MyVar not like N'%.%.%' and MyVar not like '.' then 1 else 0 end as IsNumber 
    from 
        @MyTable
) t 
order by IsNumber;
于 2016-02-17T17:21:14.313 に答える