--创建用户定义函数
create function f_getstr(@str varchar(8000))
returns varchar(8000)
as
begin
declare @i int
set @i = 1
while(datalength(substring(@str,@i,1))=1)
begin
set @i = @i + 1
end
set @str = left(@str,@i-1)
return @str
end
go--执行调用
select dbo.f_getstr('asdfasdf由IC卡生')
--输出结果
/*
--------
asdfasdf
*/
create function f_getstr(@str varchar(8000))
returns varchar(8000)
as
begin
declare @i int
set @i = 1
while(datalength(substring(@str,@i,1))=1)
begin
set @i = @i + 1
end
set @str = left(@str,@i-1)
return @str
end
go--执行调用
select dbo.f_getstr('asdfasdf由IC卡生')
--输出结果
/*
--------
asdfasdf
*/
select substring(code,1, case patindex('%[吖-做]%',code) when 0 then len(code) else patindex('%[吖-做]%',code)-1 end ) from table1当然前提时你的汉字编码是GB2312。这样的话第一个汉字为'吖',最后一个为'做'
returns varchar(4000)
as
begin
declare @i int,@s varchar(4000)
set @i=1
set @s=''
while @i<=len(@str)
begin
if DATALENGTH(substring(@str,@i,1))=1
set @s=@s+substring(@str,@i,1)
else
break
set @i=@i+1
end
return @s
end
goselect dbo.f_1('123fdsa哈哈dsa')
/*
---------------
123fdsa(所影响的行数为 1 行)
*/drop function dbo.f_1
declare @a varchar(100)
set @a ='123fdsa哈哈dsa'
print left(@a,patindex('%[吖-做]%',@a)-1)
/*
利用正则表达式替换字符
调用: 1.获取字符串中的英文字符
declare @str varchar(100)
set @str='xyz123z5'
select dbo.regexReplace(@str,'[^a-zA-Z]','',1,1) 2.获取字符串中的英文字符长度
declare @str varchar(100)
set @str='xyz123z5'
select len(dbo.regexReplace(@str,'[^a-zA-Z]','',1,1))
*/
create function dbo.regexReplace
(
@source varchar(5000), --原字符串
@regexp varchar(1000), --正则表达式
@replace varchar(1000), --替换值
@globalReplace bit = 0, --是否是全局替换
@ignoreCase bit = 0 --是否忽略大小写
)
returnS varchar(1000) AS
begin
declare @hr integer
declare @objRegExp integer
declare @result varchar(5000)exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OADestroy @objRegExp
IF @hr <> 0 begin
return null
endreturn @result
end
GO--调用
declare @str varchar(100)
set @str='123fdsa哈哈dsa'
select dbo.regexReplace(@str,'^([^\u4E00-\u9FA5]+)[\u4E00-\u9FA5]+\w+$','$1',1,1)--结果
/*
-----------------------
123fdsa(所影响的行数为 1 行)
*/
set @a ='123fdsadsa吖'print left(@a,case patindex('%[吖-做]%',@a) when 0 then len(@a) else patindex('%[吖-做]%',@a)-1 end )
returns varchar(8000)
as
begin
declare @i int
set @i = 1
while(datalength(substring(@str,@i,1))=1)
begin
set @i = @i + 1
end
set @str = left(@str,@i-1)
return @str
end
go
set @a ='123fdsadsa吖'print left(@a,case patindex('%[吖-做]%',@a) when 0 then len(@a) else patindex('%[吖-做]%',@a)-1 end )
yjdn(无尽天空)在我这里,不成功!我很纳闷
----试试下面的
declare @a Nvarchar(100)
set @a =N'123fdsa哈哈dsa'
print left(@a,patindex(N'%[吖-做]%',@a)-1)---------------------------------
看来yjdn(无尽天空)的工作现在稳定了,^_
--算是吧,在杭州出差,可能在这呆半年
declare @a Nvarchar(100)
set @a =N'123fdsadsa'
print left(@a+N'阿',patindex(N'%[吖-做]%',@a+N'阿')-1)
set @a ='123fdsadsa吖'print left(@a,case patindex('%[吖-做]%',@a) when 0 then len(@a) else patindex('%[吖-做]%',@a)-1 end )