我在一个具有可变alpha长度的列中有脏数据。我只想去掉任何不是0-9的东西。
我不想运行函数或进程。我有一个类似的脚本,它只是在文本之后抓取数值,它看起来像这样:
Update TableName
set ColumntoUpdate=cast(replace(Columnofdirtydata,'Alpha #','') as int)
where Columnofdirtydata like 'Alpha #%'
And ColumntoUpdate is Null
我认为它会工作得很好,直到我发现一些我认为只会是Alpha # 12345789格式的数据字段并不是这样。
需要剥离的数据示例
AB ABCDE # 123
ABCDE# 123
AB: ABC# 123
我只想要123。确实,所有数据字段的数字前面都有#。
我尝试了substring和PatIndex,但我不太理解语法或其他什么。有人对解决这个问题的最好方法有什么建议吗?
发布于 2013-09-05 07:52:22
有关在SQL Server中从字符串中提取数字的信息,请参阅此blog post。下面是在您的示例中使用字符串的示例:
DECLARE @textval NVARCHAR(30)
SET @textval = 'AB ABCDE # 123'
SELECT LEFT(SUBSTRING(@textval, PATINDEX('%[0-9.-]%', @textval), 8000),
PATINDEX('%[^0-9.-]%', SUBSTRING(@textval, PATINDEX('%[0-9.-]%', @textval), 8000) + 'X') -1)
发布于 2013-09-05 13:19:23
发布于 2016-12-08 22:03:49
这对我来说很好用:
CREATE FUNCTION [dbo].[StripNonNumerics]
(
@Temp varchar(255)
)
RETURNS varchar(255)
AS
Begin
Declare @KeepValues as varchar(50)
Set @KeepValues = '%[^0-9]%'
While PatIndex(@KeepValues, @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex(@KeepValues, @Temp), 1, '')
Return @Temp
End
然后像这样调用函数来查看经过清理的内容旁边的原始内容:
SELECT Something, dbo.StripNonNumerics(Something) FROM TableA
https://stackoverflow.com/questions/18625548
复制相似问题