varchar が数値かどうかを調べる簡単な方法はありますか?
例:
abc123 --> 番号なし
123 --> はい、数字です
ありがとう :)
varchar が数値かどうかを調べる簡単な方法はありますか?
例:
abc123 --> 番号なし
123 --> はい、数字です
ありがとう :)
ISNUMERICは機能しません。これは、文字列を任意の数値タイプに変換できることを示しています。これは、ほとんどの場合、知っておくべき無意味な情報です。たとえば、ISNUMERICによると、次のすべては数値です。
£、$、0d0
数字と数字のみをチェックする場合は、負のLIKE式が必要です。
not Value like '%[^0-9]%'
記事のNOTESセクションもチェックしてください。
このように確認できます
declare @vchar varchar(50)
set @vchar ='34343';
select case when @vchar not like '%[^0-9]%' then 'Number' else 'Not a Number' end
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
小数値を許可する必要が生じたので、使用しましたnot Value like '%[^0-9.]%'
DECLARE @A nvarchar(100) = '12'
IF(ISNUMERIC(@A) = 1)
BEGIN
PRINT 'YES NUMERIC'
END
ネイザンのコードでは、値に「.」のみを使用できます。終えた。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;