amit.91121 Ответов: 1

Буквенно-цифровая сортировка со специальным символом


CBSFBE20151202000017_000_1.tif
CBSFBE20151202000017_000_10.tif
CBSFBE20151202000017_000_100.tif
CBSFBE20151202000017_000_101.tif
CBSFBE20151202000017_000_102.tif
CBSFBE20151202000017_000_103.tif
CBSFBE20151202000017_000_104.tif
CBSFBE20151202000017_000_105.tif
CBSFBE20151202000017_000_106.tif
CBSFBE20151202000017_000_107.tif
CBSFBE20151202000017_000_108.tif
CBSFBE20151202000017_000_109.tif

Что я уже пробовал:

Я должен отсортировать буквенно-цифровое значение, содержащее некоторые специальные символы в sql server, я пробовал несколько предложений order by, но это не дает желаемого результата( он дает результат как 1,10,100, чем 101, он должен быть 1,2,3..100 )
Я пробовал упорядочивать по алфавитам и номерам одновременно по разделению, но это не сработало.

1 Ответов

Рейтинг:
2

OriginalGriff

В принципе, вы сохранили его неправильно: вам следует рассмотреть возможность изменения его на три поля и вычисляемый столбец, чтобы "регенерировать" полное имя. Почему? Потому что SQL не очень хорош в обработке строк, и вам нужно разбить дату, преобразовать ее часть в целое число, а затем использовать ее в качестве значения сортировки - иначе вы никогда не получите "правильную" сортировку.

В качестве альтернативы измените имена, чтобы они все были "нулевыми дополнениями":

CBSFBE20151202000017_000_0001.tif
CBSFBE20151202000017_000_0010.tif
CBSFBE20151202000017_000_0100.tif
CBSFBE20151202000017_000_0101.tif
CBSFBE20151202000017_000_0102.tif
Но это, как правило, влияет на многие системы и вызывает больше проблем, чем стоит.

Ты можешь делать все, что хочешь, но ... .. вам нужно:
1) разбейте имя файла, чтобы удалить все после teh '.' - вот CHARINDEX и остался
2) извлеките часть после последнего символа ' _ ' - это сложнее: Есть ли LastIndexOf в SQL Server? - переполнение стека[^ я покажу тебе, как это делается.
3) преобразуйте оставшийся бит - строковое число - в целое число и используйте его в качестве предложения ORDER BY.

Сложно? Да. Противно? Да. Нужно делать это каждый раз, когда вы хотите сделать это? Да.
Понимаете, что я имею в виду, говоря: "вы неправильно его сохранили"?