求一个sql function function GetNoRange(@Model),返回一个字符串。 根据@Model查找到表A A.Model列符合条件的 A.No列数据,如:select A.No from A where A.Model=@Model 查找到的结果如 C100,C101,C102,C103... 如果查到的数据是递增的,就把这些数据写成 C100-C103 这样的字符串, 如果不是递增的,就写成C100,C111,C121 这样,用“,”把不是递增的隔开 如果有部分是递增的,写成 C100,C103-C110,C121
注: A.No 的数据格式是固定的,第一个字符是字母,后面的是整数;
------解决方案--------------------
------解决方案--------------------
SQL code
--> 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #
create table # (id int)
insert into #
select 1 union all
select 3 union all
select 4 union all
select 5 union all
select 7
declare @str varchar(100)
;
with gid(gid,id) as
(
select id - row_number()over(order by id), id from # -- where Model=@Model
), val(val) as
(
select ltrim(min(id)) + isnull('-'+ltrim(nullif(max(id),min(id))),'') from gid group by gid
)
select @str = isnull(@str+',','')+val from val
select @str --> 1,3-5,7