2

我需要在 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

提前致谢,

4

1 回答 1

1

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

这比为此目的更可靠。isnumeric

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

不过,我会考虑不制作它PERSISTED并且不将其包装ISNULL为非数值。

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

不必将其标记为PERSISTED在该列上创建索引。

于 2013-09-28T17:20:59.487 回答