字符串处理示例--列车车次查询.sql
--列車車次信息數據表
CREATE TABLE tb(col varchar(100))
INSERT tb SELECT '1434/1/2/14'
UNION ALL SELECT '"10653(85707)"'
UNION ALL SELECT '"32608/7(83212/1)"'
UNION ALL SELECT '"50057()"'
UNION ALL SELECT '"T888(備)"'
UNION ALL SELECT '"21058(81404/3)0"'
UNION ALL SELECT '"22028(80404.10264)"'
UNION ALL SELECT '20037(80303.84006/9)'
UNION ALL SELECT '24031(80410/9'
UNION ALL SELECT '24048(80904)(23118)'
UNION ALL SELECT '22080(80406.83080.10284)'
UNION ALL SELECT '0031(5632? 5629. 1434/1/2/14)'
CREATE FUNCTION dbo.f_CompSTR(
@str? varchar(8000),? --包含車次的字符串
@find varchar(50)???? --要查詢的值
)RETURNS bit
AS
BEGIN
?IF @str=@find RETURN(1)
?IF LEN(@str)<LEN(@find) RETURN(0)
?--替換掉車次字符串中的無效數據
?SELECT @str=REPLACE(@str,a,b)
?FROM(--采用表集的處理方法,是為了方便以后擴充處理其他無效數據
??SELECT a='"',b='')a
?--統計數據分隔符
?SELECT @str=REPLACE(@str,a,b)
?FROM(
??SELECT a='(',b='\' UNION ALL
??SELECT a=')',b='\' UNION ALL
??SELECT a='(',b='\' UNION ALL
??SELECT a=')',b='\' UNION ALL
??SELECT a=' ',b='\' UNION ALL
??SELECT a=' ',b='\' UNION ALL
??SELECT a='.',b='\' UNION ALL
??SELECT a='.',b='\')a
?--分拆比較處理
?DECLARE @s1 varchar(8000),@h varchar(100),@s varchar(100),@l int
?WHILE @str>''
?BEGIN
??SELECT @s1=LEFT(@str,CHARINDEX('\',@str+'\')-1),
???@str=STUFF(@str,1,CHARINDEX('\',@str+'\'),''),
???@h=LEFT(@s1,CHARINDEX('/',@s1+'/')-1),
???@l=LEN(@h)+1
??IF @h=@find RETURN(1)
??WHILE CHARINDEX('/',@s1+'/')>0
??BEGIN
???SELECT @s=LEFT(@s1,CHARINDEX('/',@s1+'/')-1),
????@s1=STUFF(@s1,1,CHARINDEX('/',@s1+'/'),'')
???IF LEN(@s)<@l
????SET @s=STUFF(@h,@l-LEN(@s),8000,@s)
???IF @find=CASE
?????WHEN LEN(@s)<@l THEN STUFF(@h,@l-LEN(@s),8000,@s)
?????ELSE @S END
????RETURN(1)?
??END
?END
?RETURN(0)
END
GO
--調用上述函數查詢包含車次1434的記錄
SELECT * FROM tb WHERE dbo. f_CompSTR(col,’143’)=1
轉載于:https://www.cnblogs.com/dushu/archive/2012/05/18/2507906.html
總結
以上是生活随笔為你收集整理的字符串处理示例--列车车次查询.sql的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vim高级使用 - CentOS下使用V
- 下一篇: 使用Docker来运行WebApp