如何批量去掉字段里的字母,而留下数字?

bpcbrr 2011-02-18 02:10:43
如何批量去掉字段里的字母,而留下数字?
举个例子:
090 3 833 590 (aTuaán) 变成 090 3 833 590
...全文
702 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fwacky 2011-02-18
  • 打赏
  • 举报
回复

CREATE FUNCTION f_str(@Value NVARCHAR(1000))
RETURNS NVARCHAR(1000)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@Value)>0
SELECT @Value=STUFF(@Value,PATINDEX('%[^0-9]%',@Value),1,'')
RETURN @Value
END


这个就不错了!
Linares 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 acherat 的回复:]

SQL code

create function get_shuzi(@instr varchar(1000))
returns varchar(1000)
as
begin
declare @str varchar(800)
declare @object int
declare @r varchar(800)
set @str='var data = ……
[/Quote]

正则应该用 [^1234567890]+
替换次数大大减少
w75251455 2011-02-18
  • 打赏
  • 举报
回复
最进迷上了这xml 可能和楼主要的不一样~~不为成分只为分享!!!

create table #tb
(
id int identity(1,1),
vars varchar(1000)
)
insert into #tb select '090 3 833 590 (aTuaán)'
union all select '090 3 854v33 590 (aTuaán)'
union all select '04f90 3 854v33 590 (aTuaán)'
union all select '090 3 8533 59d0 (aTuaán)'


select
stuff((SELECT (case when PATINDEX('%[^0-9]%',id)=0 then ' '+id else null end)
FROM (SELECT [value] = CONVERT(XML , '<r>' + REPLACE( t.vars, ' ' , '</r><r>')+ '</r>')
) A
OUTER APPLY ( SELECT id = N.r.value('.' , 'varchar(100)')
FROM A.[value].nodes('/r') N (r)
) B
for xml path('')),1,1,'')
from #tb t


--------------------
090 3 833 590
090 3 590
3 590
090 3 8533

(4 行受影响)
AcHerat 2011-02-18
  • 打赏
  • 举报
回复

create function get_shuzi(@instr varchar(1000))
returns varchar(1000)
as
begin
declare @str varchar(800)
declare @object int
declare @r varchar(800)
set @str='var data = "'+@inStr+'";var reCat = /[^1234567890]/gi;data.replace(reCat,"");'
exec sp_OACreate 'MSScriptControl.ScriptControl',@object output
exec sp_OASetProperty @object, 'Language','javascript'
exec sp_OAMethod @object, 'eval', @r out,@str
return @r
end
go

--正则的!上边多了两个符号的筛选,这个对的。
AcHerat 2011-02-18
  • 打赏
  • 举报
回复

create function get_shuzi(@instr varchar(1000))
returns varchar(1000)
as
begin
declare @str varchar(800)
declare @object int
declare @r varchar(800)
set @str='var data = "'+@inStr+'";var reCat = /[^1234567890,*]/gi;data.replace(reCat,"");'
exec sp_OACreate 'MSScriptControl.ScriptControl',@object output
exec sp_OASetProperty @object, 'Language','javascript'
exec sp_OAMethod @object, 'eval', @r out,@str
return @r
end
go

--正则的!
Godsaidlwq 2011-02-18
  • 打赏
  • 举报
回复

create function FN_GetNumber
(
@str varchar(8000)
)
returns varchar(8000)
begin
declare @str2 varchar(8000)
declare @i int
select @i=len(@str),@str2=''
while @i>=0
begin
if unicode(left(@str,1)) between 48 and 57
select @str2=@str2+left(@str,1)
select @str=stuff(@str,1,1,'')
select @i=@i-1
end
return @str2
end
go

declare @str varchar(8000)
select @str='23lkjdf 2134;lkjdfg了中'
select dbo.fn_getnumber(@str)

drop function dbo.fn_getnumber
wing7742 2011-02-18
  • 打赏
  • 举报
回复
大版的这个犀利啊
收藏 验证去
中国风 2011-02-18
  • 打赏
  • 举报
回复
以上函數功能將把非數字的內容去掉
--用法
select dbo.f_str(列) as 列 from Table
中国风 2011-02-18
  • 打赏
  • 举报
回复
CREATE FUNCTION f_str(@Value NVARCHAR(1000))
RETURNS NVARCHAR(1000)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@Value)>0
SELECT @Value=STUFF(@Value,PATINDEX('%[^0-9]%',@Value),1,'')
RETURN @Value
END
wing7742 2011-02-18
  • 打赏
  • 举报
回复
楼上达人可以说说这个函数的写法么 比较关注通用性

不想a-z&A-Z一个一个的去过滤吧这很费体力的
bpcbrr 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hdhai9451 的回复:]

这种要自己写一个函数处理才行的
[/Quote]你会写么,示范一下
Andy__Huang 2011-02-18
  • 打赏
  • 举报
回复
这种要自己写一个函数处理才行的

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧