一:取字符串中出现的首个数字是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)