|
database
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
creating a udfnatural alphanumeric sorting, and would be extremely and eternally grateful if someone could show me how to turn this into a function that I could use like above. I would like to be able to feed in the name of the column to be sorted(it is 'fieldid' below) and the name of the database(it is 'tblsamples' below). I am having trouble in figuring out how to implement/create a function which would act like this select * from tblsamples order by naturalsort('fieldid', 'tblsamples') Thanks a lot. Here is my query: select TOP 100 fieldid as 'sortcolumn', LEFT(fieldid, PATINDEX('%[0-9]%', fieldid) - 1) as 'a', CASE WHEN right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ) not like '%[a-z,-]%' then CAST(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ) AS INT) else cast ( left ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), case when patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) = 0 then patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) else patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) -1 end ) as int) end as 'b', LEFT ( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) , CASE WHEN PATINDEX('%[0-9]%', right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) = 0 THEN LEN( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) ELSE PATINDEX('%[0-9]%', right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) -1 END ) as 'c', CASE WHEN right ( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) , len( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) - PATINDEX('%[0-9]%', right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) + 1 ) not like '%[a-z,-]%' then CAST(right ( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) , len( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) - PATINDEX('%[0-9]%', right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) + 1 ) AS INT) else cast ( left ( right ( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) , len( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) - PATINDEX('%[0-9]%', right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) + 1 ), case when patindex('%[a-z, -]%', right ( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) , len( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) - PATINDEX('%[0-9]%', right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) + 1 )) = 0 then patindex('%[a-z, -]%', right ( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) , len( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) - PATINDEX('%[0-9]%', right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) + 1 )) else patindex('%[a-z, -]%', right ( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) , len( right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) - PATINDEX('%[0-9]%', right ( right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 ), len(right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) - patindex('%[a-z, -]%', right (fieldid, len(fieldid) - PATINDEX('%[0-9]%', fieldid) + 1 )) + 1 ) ) + 1 )) -1 end ) as int) end as 'd' from tblsamples order by a,b,c,d |
|||||||||||||||||||||||