表中有个字段IDS nvarchar(50)
数据类似
1,4,5,6
4,8,10,14
5,44,33,2
5,7,8,5,4
...
现在需要把所有IDS包含4的数据选出来
第一反应,如果有split函数就OK了,可惜没有
可以这样
SELECT *
FROM TestTable
WHERE (CHARINDEX('[4]', '[' + REPLACE(IDS, ',', '][') + ']') > 0)
实现对,用界定义符替换
顺便总结一下:
我将问题再入一点.若Type字段是这样的存储
A001
B001
C002
D004
E005
..
Z003
其中A至Z都有特别的含义,当有条件的选择时,你也可能写上十多个OR或 十多UNION,但是像下面这样写是不是正简单呢?
若条件中的值连续:
SELECT * FROM TestDB WHERE Type LIKE '[A-Z]%'
若不连续
SELECT * FROM TestDB WHERE Type LIKE '[D,E,K,U,...Y]%'
呵呵,类似正则哦!
create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(a varchar(100))
--实现split功能 的函数
--date :2005-4-20
--Author :Domino
as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>'/'
insert @temp values(@SourceSql)
return
end
declare @ss varchar(5000)
set @ss=(select top 1 f from ff)
select * from dbo.f_split(@ss,',')