SQL ISNUMERIC 函数用于验证一个表达式是否为数字。如果值为数字,ISNUMERIC 函数将返回 1;否则,将返回 0。
例如,作为一名电子商务所有者,您想向美国的所有客户发送圣诞节礼品卡。如果您的结果返回了奇怪的邮政编码(非数字邮政编码,例如 ST1 RG4),该怎么办?为了避免这种情况,我们可以使用 ISNUMERIC 来限制结果。
SQL Server ISNUMERIC 函数语法
ISNUMERIC 函数的语法是:
SELECT ISNUMERIC ([Check_Expression]) FROM [Source]
- Check_Expression:请指定要检查数字值的有效表达式或列名。isNumeric 函数将检查列值是否为数字。
当用户指定的表达式是有效的数字数据类型时,ISNUMERIC 函数将返回 1。否则,它将返回 0。下表将显示正确的数字数据类型
| int | tinyint |
| smallint | bigint |
| money | smallmoney |
| float | decimal |
| numeric | float |
SQL Server ISNUMERIC 函数会为一些不是数字的字符返回 1,例如负号(-)、正号(+)、逗号(,)以及美元符号($)等有效的货币符号。在此 ISNUMERIC 函数示例中,我们将使用以下数据

表结构如下

SQL Server ISNUMERIC 函数
如果观察上面的截图,有五列,其中 2 列是 NVarchar 类型,1 列是 Money 类型,另一列是 Float 类型,最后一列是 Integer 类型。
在此示例中,我们将使用 IsNumeric 函数检查 Lastname、[YearlyIncome]、[Tax] 和 [Variable pay] 列是否包含数字数据。
SELECT [FirstName]
,[LastName]
,ISNUMERIC([LastName]) AS [Name_Flag]
,[YearlyIncome]
,ISNUMERIC([YearlyIncome]) AS [Income_Flag]
,[Tax]
,ISNUMERIC([Tax]) AS [Tax_Flag]
,[Variable Pay]
,ISNUMERIC([Variable Pay]) AS [Pay_Flag]
FROM [SQLIsNumeric]

在下面的语句中,我们使用 IsNumeric 函数检查 LastName 列是否为数字。我们还使用 SQL Server 中的 别名 列重新指定了一个名为 Name_Flag 的新列。
ISNUMERIC([LastName]) AS [Name_Flag]
SQL ISNUMERIC 函数示例 1
以下查询将展示使用 IsNumeric 函数的多种方法。
SELECT ISNUMERIC('12345') AS Example1;
SELECT ISNUMERIC(12345) AS Example2;
SELECT ISNUMERIC(2 * 4 + 5) AS Example3;
SELECT ISNUMERIC('2.0e9') AS Example4;
SELECT ISNUMERIC($12345) AS Example5;
SELECT ISNUMERIC('A12345') AS Example6;
SELECT ISNUMERIC('09-08-2016') AS Example7;

以下代码行将把字符串“12345”转换为数字并检查它是否是数字。
SELECT ISNUMERIC('12345') AS Example1;
正如我们之前所说,IsNumeric 函数将为美元符号($)返回 1。
SELECT ISNUMERIC($12345) AS Example5;
在下面的语句中,我们同时使用了字母和数字。它返回零,因为它无法转换 A。
SELECT ISNUMERIC('A12345') AS Example6;
ISNUMERIC 函数示例 2
以下查询将向您展示典型的 IsNumeric 功能。
SELECT ISNUMERIC('-') AS Example1;
SELECT ISNUMERIC('+') AS Example2;
SELECT ISNUMERIC('

SQL ISNUMERIC 在 CASE 语句中的应用
在此示例中,我们将在 CASE 语句 中使用 IsNumeric 函数。在开始示例之前,让我们先看看 sql 表中的数据。

ISNUMERIC 代码
SELECT [Name]
,[City]
,[PostCode]
,CASE
WHEN ISNUMERIC([PostCode]) <> 1 THEN 'N'
ELSE 'Y'
END AS [PostCode_Flag]
FROM [IsNumeric Example2]

以下语句将检查 ISNUMERIC([PostCode]) 的结果是否不等于 1。如果结果为真,则返回“N”,否则返回“Y”。
WHEN ISNUMERIC([PostCode]) <> 1 THEN 'N' ELSE 'Y'