首页 > 解决方案 > 当它们进入时将非数字设置为空

问题描述

我有一个 paymentHistory 字段,它是一个 int 字段,用于跟踪该帐户之前已支付了多少笔款项。我有这个字段的 varchar 来源,有人在前端意外输入 1.11。我无法更改我的来源,但我希望能够只允许数字并将非数字转换为空值。有人可以举个例子,我将如何将此 PaymentHistory 列中的值转换为仅数字或空值。谢谢!

标签: sqlsql-serversql-convert

解决方案


您可以使用约束拒绝非数字值:check

alter table chk_paymenthistory add constraint chk_paymenthistory_num
    check (num not like '%[^0-9]%');

这只允许数字进入列。但是您不想拒绝该值,而是想将其替换为NULL.

如果您使用 插入行insert,则可以使用try_cast()/ try_convert()

insert into paymenthistory ( . . . )
    values ( . . ., try_cast(num as int), . . .);

这会将值转换为整数(您可以使用bigintornumeric代替)。然后它将被保存为一个字符串——但null如果它不是一个有效的数字。

这让您可以触发其他情况。但是还有什么情况?想到的是bulk insert,但默认情况下不会调用触发器。如果您需要此功能,您可以打开它们。


推荐阅读