можно наверно так, если я правильно понял идею, только с типами не знаю что...
CREATE FUNCTION dbo.Example(@s1 varchar(10), @s2 varchar(10))
RETURNS varchar(10)
BEGIN
declare @a varchar(10)
declare @i int
set @i = 0
while (substring(@s1,1,@i+1)=substring(@s2,1,@i+1)) and (@i<=len(@s1) or @i<len(@s2)) begin
set @i = @i + 1
end
set @a = substring(@s1,1,@i)
RETURN @a
END
select dbo.Example(max(j.docno),min(j.docno))
from zayavki as z (nolock)
left join _1sjourn as j (nolock) on z.iddoc = j.iddoc
where etap = 3
and z.iddoc not in (select distinct iddoc from zayavki (nolock) where etap > 3)
and pechskl = 1
Или в особо извращённой форме.. ггг
SELECT
MAX(CONVERT(int, CASE WHEN RowN=1 THEN
CASE WHEN tmp.str6 LIKE tmp.str1+'%' THEN tmp.str1 END
ELSE CASE WHEN RowN=2 THEN
CASE WHEN tmp.str6 LIKE tmp.str2+'%' THEN tmp.str2 END
ELSE CASE WHEN RowN=3 THEN
CASE WHEN tmp.str6 LIKE tmp.str3+'%' THEN tmp.str3 END
ELSE CASE WHEN RowN=4 THEN
CASE WHEN tmp.str6 LIKE tmp.str4+'%' THEN tmp.str4 END
ELSE CASE WHEN RowN=5 THEN
CASE WHEN tmp.str6 LIKE tmp.str5+'%' THEN tmp.str5 END
END END END END END)) as str
FROM (
SELECT
LEFT(val.a,1) as str1,
LEFT(val.a,2) as str2,
LEFT(val.a,3) as str3,
LEFT(val.a,4) as str4,
LEFT(val.a,5) as str5,
val.b as str6,
RowNs.RowN
FROM (
select max(j.docno) as a
, min(j.docno) as b
from zayavki as z (nolock)
left join _1sjourn as j (nolock) on z.iddoc = j.iddoc
where etap = 3
and z.iddoc not in (select distinct iddoc from zayavki (nolock) where etap > 3)
and pechskl = 1
) as val,
(
SELECT 1 as RowN
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
) as RowNs
) as tmp
Захотелось проверить свои зелёные познания на профпригодность.. катит?