Är det alltid lika många inledande bokstäver?
Slutar alla filnamn med numeriska värden?
-- om 1 är sant och de två första tecknen är bokstäver
order by cast(substring(file_name,3,len(file_name)-2) as int)
-- om 2 är sant
order by cast(substring(file_name,patindex('[0-9]',file_name),
len(file_name)-patindex('[0-9]',file_name)+1) as int)
Tyvärr så är inget sant, det är det som gör det klurigt, resultaten visas efter vilket catid de har, så vissa kategorier har t.ex "GC123" och andra kan heta "Så det kan gå".
Är alla siffror sammanhängande eller kan det finnas namn som
A123B456 ?
Och i så fall hur skall dom sorteras?
Om du använder sql server 2000 så går det att skriva en funktion som tittar på varje tecken och plockar ut alla siffror
create function analyzeThis(@file_name varchar(30))
returns int as
declare @number,@p int
declare @c char
set @number = 0
set @p = 1
while @p <= len(@file_name)
begin
set @c = substring(@file_name,@p,1)
if @c between '0' and '9'
set @number = 10*@number + cast(@c as int)
set @p = @p + 1
end
if @number = 0 set @number = 9999999
return @number
ok, för antingen är file_name = BokstäverSiffror eller bara bokstäver, och den ska sortera efter siffrorna i slutet när filnamnet slutar med siffro t.ex BG0145. De kommer aldrig heta t.ex DV012BN2. Om det är bara bokstäver så ska den bara sortera i bokstabsordning.
Jag använder MS SQL Server 2000, men ska jag lägga din function i User Defined Functions?
om du vill ha sortering enligt bokstavsordning på de utan bokstäver så behöver du lägga till
order by analyzeThis(filename),filename
Om alla siffror är sammanhämgande så går det att göra utan en funktion. (Har inte tid nu har starttid 14.17 på golfbanan. Man kan plocka ihop det med funktionerna substring patindex cast och reverse.)
Hum, nu har jag kikat på det och kommit fram till att din funktion inte fungerade... har jag gjort fel? Jag la den i User Defined Functions. Men blev syntax error.