一:取字符串中出现的首个数字是5的那些记录
比如 ZCB520,ZCB888,520ZCB,
ZCB888就是需要被过滤的。
select colName, patindex('%[0-9]%',colName) 首个数字出现的位置 from TableName
where substring(colName,patindex('%[0-9]%',colName),1)='5'
如果想要返回首个非数字出现的位置就用:patindex('%[^0-9]%',colName)
PATINDE函数说明。
语法 PATINDEX (<’%substring _expression%’>, <column_ name>)
其中子串表达式前后必须有百分号“%”否则返回值为0.
这个函数从<column_ name>列中去查找<’%substring _expression%’>表达式指定的字符串,并返回该字符串首次在column_ name出现的位置。
二:在大写字母前插入空格
Id value
1 HelloWorld
2 NewArrivalsCareerClothing
3 CheckbookCoversCheckbookCovers
要更新成:
1 Hello World
2 New Arrivals Career Clothing
3 Checkbook Covers Checkbook Covers
解决方案一:
create table tb(id int,[value] varchar(100))
insert into tb
select 1,'HelloWorld' union all
select 2,'NewArrivalsCareerClothing' union all
select 3,'CheckbookCoversCheckbookCovers' union all
select 4,'WTO'
go
create function f_change(@a varchar(100))
returns varchar(100)
as
begin
declare @len int
declare @int int
declare @str varchar(100)
set @str = ''
set @len = len(@a)
set @int = 1
while @int <= @len
begin
if (ascii(substring(@a,@int,1)) between 66 and 96)
begin
set @str = @str + ' ' + substring(@a,@int,1)
end
else
begin
set @str = @str + substring(@a,@int,1)
end
set @int = @int + 1
end
return stuff(@str,1,1,'')
end
go
select * from tb
select id,dbo.f_change([value]),[value] from tb
drop table tb
drop function f_change
解决方案二:
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'Ole Automation Procedures', 1
RECONFIGURE
--以下是我以前写的利用正则表达式替换字符串的函数
IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL
DROP FUNCTION dbo.RegexReplace
GO
CREATE FUNCTION dbo.RegexReplace
(
@string VARCHAR(MAX), --被替换的字符串
@pattern VARCHAR(255), --替换模板
@replacestr VARCHAR(255), --替换后的字符串
@IgnoreCase INT = 0 --0区分大小写 1不区分大小写
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @objRegex INT, @retstr VARCHAR(8000)
--创建对象
EXEC sp_OACreate 'VBScript.RegExp', @objRegex OUT
--设置属性
EXEC sp_OASetProperty @objRegex, 'Pattern', @pattern
EXEC sp_OASetProperty @objRegex, 'IgnoreCase', @IgnoreCase
EXEC sp_OASetProperty @objRegex, 'Global', 1
--执行
EXEC sp_OAMethod @objRegex, 'Replace', @retstr OUT, @string, @replacestr
--释放
EXECUTE sp_OADestroy @objRegex
RETURN @retstr
END
GO
--针对这里,可以:
SELECT dbo.RegexReplace([value],'[A-Z]',' $&',0) from tb
如果一个字符串中出现WTO,UFO这样的字,第一种方案的判断会很麻烦,而第二种只要改成
SELECT dbo.RegexReplace('HelloWorldUFO', '([a-z])([A-Z])', '$1 $2',0)就可以了。
(该示例取处CSDN:http://topic.csdn.net/u/20110127/10/47c2d7ea-7878-4de0-bc29-ae9654cec894.html)