如何用 0 替换 varchar 列中的所有非数字值

Posted

技术标签:

【中文标题】如何用 0 替换 varchar 列中的所有非数字值【英文标题】:How to replace all non-numeric values in a varchar Column with a 0 【发布时间】:2021-11-10 01:20:45 【问题描述】:

我正在尝试将列表转换为 BIGINT,但首先我需要删除所有垃圾数据

这意味着,我必须删除此列中的所有非数字数据并将其替换为零,以便我可以更新表格类型

如何在 SQL Server 中实现这一点?

谢谢!

例子:

CREATE TABLE SampleData
(
    Col1 VARCHAR(100)
)

-- I want to remove this kind of data
INSERT INTO SampleData
VALUES('<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">2007220737724</font></')

-- I want to keep this kind of data
INSERT INTO SampleData
VALUES('2007220737724')

【问题讨论】:

你能提供样本数据和想要的结果吗? 编辑:添加了一些示例数据 但是你有什么尝试? 【参考方案1】:

看起来很简单,你可以使用try_cast,将所有无效数据替换为'0'

update t
set col1='0'
where try_cast(col1 as bigint) is null

【讨论】:

【参考方案2】:

您的数据似乎是几乎有效的 XML,只是缺少正确的结束标记。

假设它是有效的,您可以使用 XQuery

SELECT CAST(Col1 AS xml).value('(font/font/text())[1]','bigint')
FROM SampleData

db<>fiddle

【讨论】:

以上是关于如何用 0 替换 varchar 列中的所有非数字值的主要内容,如果未能解决你的问题,请参考以下文章

如何用零替换数组中的所有负数[重复]

如何用同一数据框中其他列的实际列值替换一列中的字符串值?

如何用总和替换文件中的数字?

如何用熊猫列中的另一个字符串替换子字符串[关闭]

Oracle SQL:如何用 CR/LF 替换现有 VARCHAR2 字段中的字符

如何用js中的单个字符替换单个数字和两位数字? [复制]