次のSQLステートメントを試してください。
SELECT name,
case isnumeric(SUBSTRING(name, LEN(name)-4,2))
when 1 then
left(name, len(name)-8) + 'z' + RIGHT(name, 2) + '-' + SUBSTRING(name, LEN(name)-4,2)
else name
end as sortby
FROM [your table name]
order by sortby
クエリは、並べ替えの目的でフィールドを追加します。そのフィールドの値は、名前フィールドに数値が含まれているかどうかによって異なります。はいの場合、それをperfix(つまり、'Banaskantha')+'z'(つまり、接尾辞のない接頭辞のインスタンスの下になります)、接尾辞(つまり、'DV')+数値に変換します。数値がない場合は、元の値を保持します。
私はいくつかの仮定をしました:
- 数値は常に末尾から5文字から始まります
- フィールド値に数値がある場合、接頭辞(つまり、Banaskantha)と「-」の間および「-」と数値の間には常にスペースがあります。
- フィールド値に数値が含まれていない場合、接頭辞と接尾辞の間にスペースはありません。
仮定の1つが正しくない場合は、それに応じてSQLステートメントを書き直してください。
フィールド値に一貫性がないために問題が発生したとしましょう。このような場合、並べ替えの目的でテーブルにフィールドを作成し、挿入トリガーと更新トリガーに基づいてフィールドに入力することをお勧めします。