読者です 読者をやめる 読者になる 読者になる

checkpoint

自分用のIT技術系ノートです。古い情報や間違っている情報もあるので注意。

カンマを含む数値文字列をdecimalにキャストするとエラー

SQL Server

Transact-SQL内で文字列を数値にキャストすることはよくあると思いますが、

'10,000'

みたいに、桁区切りのカンマが入っている場合も多いでしょう。
カンマが入っていてもISNUMERIC関数でTrueが返されます。
しかしこれをこのままdecimalにキャストしようとするとエラーになります。
例えば、

ISNUMERIC('10,000') --これはTrueなのに…
CAST('10,000' AS decimal(15,3))   --エラー
CONVERT(decimal(15,3), '10,000')  --こちらもエラー

この場合、一旦money型にキャストしてからdecimalにすればよいです。

CAST(CAST('10,000' AS money) AS decimal(15,3))   --CONVERTも可

しかし、当然moneyからdecimalにキャストするとき丸め処理が入ります。
decimalの小数点桁数を何桁にしているかに注意しましょう。