sqlserver,一個自定義函式(提取字串中的數值,包含0-9和‘.’)
阿新 • • 發佈:2019-02-06
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
結果如下:(成功)