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 に答える