【问题标题】:using ISNUMERIC() with sql_variant SQL Server将 ISNUMERIC() 与 sql_variant SQL Server 一起使用
【发布时间】:2013-04-25 02:49:17
【问题描述】:

如何将ISNUMERIC() 函数与sql_variant 数据类型一起使用?

以下代码不起作用

DECLARE @x sql_variant 
SET @x = 3 
IF ISNUMERIC(@x) = 1 
 SELECT 'Numeric'
 ELSE
SELECT ' NOT' 

错误:

消息 8116,第 16 级,状态 1,第 4 行
参数数据类型 sql_variant 对 isnumeric 函数的参数 1 无效。

但是这行得通

IF ISNUMERIC(CAST(@x AS INT)) = 1 

如果没有CAST(),有什么办法可以做到这一点

在谷歌上没有找到任何有用的关于这个问题的东西谢谢,我正在使用 SQL Server 2008 R2

【问题讨论】:

  • 您是否尝试检查 value 是否为数字,或者 基础数据类型 是否为数字类型?例如,NVARCHAR '3' 是否应该被视为数字?
  • Filip Answer 适用于我现在的情况,但将其称为 @x = '123' 数字仍然没有意义吗?
  • 当心,ISNUMERIC() 并不总是像您期望的那样“工作”。 请参阅:simple-talk.com/blogs/2011/01/13/…

标签: sql tsql sql-server-2008-r2


【解决方案1】:

如果您想知道底层数据类型是否为数字,可以使用SQL_Variant_Property来查找;

DECLARE @x sql_variant 
SET @x = 3.2

SELECT CASE 
       WHEN SQL_Variant_Property(@x, 'Precision') = 0 
       THEN 'NO' 
       ELSE 'YES' 
       END

【讨论】:

    【解决方案2】:

    投射到int 并没有什么意义。您的转换将失败(当出现除整数以外的其他内容时)并且您会收到错误消息。

    但是,您可以转换为 nvarchar(max) - 这应该始终有效,并且您的 ISNUMERIC 函数将按预期运行

    【讨论】:

      猜你喜欢
      • 2011-07-22
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      • 2019-03-23
      • 2015-12-22
      相关资源
      最近更新 更多