TRY_CONVERT関数で数値確認する方法
TRY_CONVERT関数は型変換をする関数です。TRY_CONVERT関数を使用して数値型に型変換をし、失敗した場合は 数値ではない と判断できます。 第一引数にデータ型(intやdecimalなど)を、第二引数にチェックしたい式(文字列やテーブルのカラム名など)を渡します。戻り値は 変換に失敗した場合はNULLを、変換できた場合は変換後の値を返します。結果(int値 または NULL -> 数値ではない) = TRY_CONVERT(int, <式>)
結果(decimal値 または NULL -> 数値ではない) = TRY_CONVERT(decimal, <式>)
次のサンプルSQLはすべて NULL以外 の値を返します。
--結果 = NOT NULL
SELECT TRY_CONVERT(int , '123456');
SELECT TRY_CONVERT(decimal, '123456');
SELECT TRY_CONVERT(decimal, '123456.0');
SELECT TRY_CONVERT(decimal, '123456.789');

次のサンプルSQLはすべて NULL を返します。int型に少数を渡すとNULLが返るので、少数の判定をする場合は decimal または float を指定します。
--結果 = NULL
SELECT TRY_CONVERT(int , '123456.789');
SELECT TRY_CONVERT(int , '123456.0');
SELECT TRY_CONVERT(int , '11234abc');
SELECT TRY_CONVERT(decimal, '11234abc');

次のSQLは テーブル「SampleTable」の 列「Password」が 数値のみ のレコードを検索します。
--テーブル「SampleTable」の 列「Password」が 数値のみ のレコードを検索
SELECT *
FROM [SampleTable]
WHERE TRY_CONVERT(int, [Password]) IS NOT NULL;

ISNUMERIC関数で数値確認する方法
ISNUMERIC関数の引数に チェックしたい 文字列 や テーブルのカラム名 などを指定します。結果はINT型で返され、数値の場合は 1 を、それ以外は 0 を返します。結果(1:数値 0:数値ではない) = ISNUMERIC(<式>)
次のサンプルSQLは 文字列 '123456'、'123456.678' と '123abc' が数値かを判定しています。
--結果 = 1
SELECT ISNUMERIC('123456');
SELECT ISNUMERIC('123456.789');
--結果 = 0
SELECT ISNUMERIC('123abc');

次のSQLは テーブル「SampleTable」の 列「Password」が 数値のみ のレコードを検索します。
--テーブル「SampleTable」の 列「Password」が 数値のみ のレコードを検索
SELECT *
FROM [SampleTable]
WHERE ISNUMERIC([Password]) = 1;

ISNUMERIC関数の注意点
ISNUMERIC関数を使用すると手軽に数値のチェックができますが、通貨記号や指数も数値として判定されます。次のSQLは全て1(数値判定)を返します。
--結果 = 1
SELECT ISNUMERIC('1E2');
SELECT ISNUMERIC(',');
SELECT ISNUMERIC('.');
SELECT ISNUMERIC('$');
SELECT ISNUMERIC('\');

参考資料
- Microsoft 公式ドキュメント - TRY_CONVERT (Transact-SQL)
- Microsoft 公式ドキュメント - TRY_CAST (Transact-SQL)
- Microsoft 公式ドキュメント - ISNUMERIC (Transact-SQL)
検証環境
- Microsoft SQL Server 2022 (RTM-CU5) (KB5026806) - 16.0.4045.3 (X64) May 26 2023 12:52:08 Copyright (C) 2022 Microsoft Corporation Express Edition (64-bit) on Linux (Ubuntu 20.04.6 LTS) <X64>
- Docker image: mcr.microsoft.com/mssql/server:2022-latest
- Docker Desktop 4.21.1(114176)
- Docker Compose v2.19.1
- Docker Engine 24.0.2
- Microsoft SQL Server Management Studio v19.0.1(19.0.20200.0+9286509b)
- Windows 10 Enterprise Version 22H2 OS Build 19045.3086 Experience: Windows Feature Experience Pack 1000.19041.1000.0