sql - 当它们进入时将非数字设置为空
问题描述
我有一个 paymentHistory 字段,它是一个 int 字段,用于跟踪该帐户之前已支付了多少笔款项。我有这个字段的 varchar 来源,有人在前端意外输入 1.11。我无法更改我的来源,但我希望能够只允许数字并将非数字转换为空值。有人可以举个例子,我将如何将此 PaymentHistory 列中的值转换为仅数字或空值。谢谢!
解决方案
您可以使用约束拒绝非数字值: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), . . .);
这会将值转换为整数(您可以使用bigint
ornumeric
代替)。然后它将被保存为一个字符串——但null
如果它不是一个有效的数字。
这让您可以触发其他情况。但是还有什么情况?想到的是bulk insert
,但默认情况下不会调用触发器。如果您需要此功能,您可以打开它们。
推荐阅读
- sql - SQL 80% 的离散分布百分位
- ffmpeg - 如何将爱奇艺的 JSON 转换为常规 m3u8
- jupyter-notebook - Huggingface BertForMaskedLM 在 90 多次迭代后失败
- c++ - 为什么cuda内核可以访问主机内存?
- express - Expressjs 收听后发送内容
- python - 为什么 os.stat().st_size 为 dir 返回 0?
- javascript - 将 2d 文本剪辑到 3d 对象 WebGl
- amazon-web-services - 私有子网中具有公共 IP 的实例可以接收互联网流量吗?
- python - Python:试图抓取 Jumia 笔记本电脑网站
- cmake - CMake 为每个配置链接器标志设置