sqlserver,一个自定义函数(提取字符串中的数值,包含0-9和‘.’)

GO
ALTER FUNCTION [dbo].[clear_num](@s VARCHAR(100))
RETURNs VARCHAR(100) 
as 
BEGIN
WHILE PATINDEX('%[^0-9.]%', @s)>=1
BEGIN
 set @s=replace(@s,SUBSTRING(@s,PATINDEX('%[^0-9.]%', @s),1),'');
END
RETURN(@s)
END
创建测试表(源表):                                 
CREATE TABLE [dbo].[test] (
[name] varchar(100) COLLATE Chinese_PRC_CI_AS NULL ,
[id] int NULL ,
[first_name] varchar(255) COLLATE Chinese_PRC_CI_AS NULL 
)
insert into test values('123asd."456fg',1,'ads');
insert into test values('234asd.:s456f',2,'fd');
insert into test values('345asd.,?s456f',3,'hrd');

目标表test_target 与源表test结构一样

创建存储过程,将源表取出放到另一个表里,被修改列被提取

USE [m_test]
GO
/****** Object:  StoredProcedure [dbo].[get_num]    Script Date: 2016/12/23 9:51:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[get_num]
AS
begin 
		DECLARE @name VARCHAR(1000);
		DECLARE @id bigint;
		DECLARE @first_name VARCHAR(100);
		DECLARE cur_f cursor for SELECT name,id,first_name from test;
		open cur_f
		FETCH NEXT from cur_f into @name,@id,@first_name;
		WHILE @@fetch_status=0
		BEGIN
			set @name=dbo.clear_num(@name);
			INSERT into test_target values (@name,@id,@first_name);
			FETCH NEXT from cur_f into @name,@id,@first_name;
		END;
		CLOSE cur_f;
		DEALLOCATE cur_f;
end 

结果如下:(成功得意


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值