【问题标题】:TryParse in a Sql Server computed columnSql Server 计算列中的 TryParse
【发布时间】:2013-09-28 09:16:29
【问题描述】:

我需要在 SQL Server 数据表中添加一个计算列,以对同一个表中的另一列进行强制转换。是否有实现它的最佳方法或有人有更好的主意?

重要提示:StringValue 列有 5% 或更少的非数值,它们必须被解析为零。

ALTER TABLE dbo.Tabla ADD
    ParsedValue AS case isnumeric(StringValue) when 1 then cast(StringValue as decimal(18,4)) else 0 end PERSISTED 
GO

提前致谢,

【问题讨论】:

  • 什么版本的 SQL Server?
  • 这是 SQL Server 2012,我不确定它会是什么版本。

标签: sql-server sql-server-2012 calculated-columns


【解决方案1】:

在 SQL Server 2012 上,您可以使用 TRY_CONVERT

为此目的,这是 more reliable 而不是 isnumeric

ALTER TABLE dbo.Tabla
  ADD ParsedValue AS ISNULL(TRY_CONVERT(decimal(18, 4), StringValue), 0) PERSISTED 

我会考虑不将其设为 PERSISTED,也不要将其包装在 ISNULL 中以获取非数值。

将非数值视为0 而不是NULL 将意味着,例如,AVG 的计算不正确。

无需将其标记为PERSISTED 即可在此列上创建索引。

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 2011-05-04
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 2011-04-11
    • 2010-09-29
    • 2010-09-07
    相关资源
    最近更新 更多