首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >选择查询以删除非数字字符

选择查询以删除非数字字符
EN

Stack Overflow用户
提问于 2013-09-05 07:41:56
回答 16查看 267.2K关注 0票数 77

我在一个具有可变alpha长度的列中有脏数据。我只想去掉任何不是0-9的东西。

我不想运行函数或进程。我有一个类似的脚本,它只是在文本之后抓取数值,它看起来像这样:

代码语言:javascript
复制
Update TableName
set ColumntoUpdate=cast(replace(Columnofdirtydata,'Alpha #','') as int)
where Columnofdirtydata like 'Alpha #%'
And ColumntoUpdate is Null

我认为它会工作得很好,直到我发现一些我认为只会是Alpha # 12345789格式的数据字段并不是这样。

需要剥离的数据示例

代码语言:javascript
复制
AB ABCDE # 123
ABCDE# 123
AB: ABC# 123

我只想要123。确实,所有数据字段的数字前面都有#。

我尝试了substring和PatIndex,但我不太理解语法或其他什么。有人对解决这个问题的最好方法有什么建议吗?

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2013-09-05 07:52:22

有关在SQL Server中从字符串中提取数字的信息,请参阅此blog post。下面是在您的示例中使用字符串的示例:

代码语言:javascript
复制
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)
票数 93
EN

Stack Overflow用户

发布于 2013-09-05 13:19:23

您可以使用stuffpatindex

代码语言:javascript
复制
stuff(Col, 1, patindex('%[0-9]%', Col)-1, '')

SQL Fiddle

票数 42
EN

Stack Overflow用户

发布于 2016-12-08 22:03:49

这对我来说很好用:

代码语言:javascript
复制
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

然后像这样调用函数来查看经过清理的内容旁边的原始内容:

代码语言:javascript
复制
SELECT Something, dbo.StripNonNumerics(Something) FROM TableA
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18625548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档