Это будет легко работать не так, и, возможно, также нарушает standard database rules.
Ваш путь - это иметь два столбца, оба типа int
, причем один из них является индексом, а другой - годом. Скажем, у вас есть столбцы id
и year
, ваш запрос будет затем
SELECT `id`, `year` FROM Files_master ORDER BY `id` ASC, `year` ASC
Обратите внимание, что порядок, в котором перечислены столбцы в ORDER BY
заявления зависит от первичного и вторичного столбца порядка, так что, может быть, вы первый хотите заказать по годам.
Если вы действительно, на самом деле, должны использовать этот формат, и только тогда, вы могли бы, вероятно, найти способ использовать SUBSTRING_INDEX
разделить вашу строку, а затем что-то вроде (непроверенные):
SELECT SUBSTRING_INDEX(`AstNum`, '/', 1) AS `id`,
SUBSTRING_INDEX(`AstNum`, '/', -1) AS `year`
ORDER BY `id` ASC,`year` ASC
Обратите внимание, что это, вероятно, будет довольно медленным для оценки.
Edit: В ответ на комментарий, так как получается, SQL Server используются вместо MySQL (то, что я предполагал, на момент написания статьи) команда должна быть несколько иными, более сложными (до сих пор непроверенного , смещение может быть .. выключено):
SELECT SUBSTRING(AstNum, 1, LEN(AstNum)-5) AS id,
SUBSTRING(AstNum, LEN(AstNum)-3, 4) AS year
ORDER BY id ASC, year ASC
что это всегда так? или это может быть больше /? НАПРИМЕР. 1/1980/11. и какие dbms вы используете? – sagi
Он работает абсолютно так, как предполагалось. Сортировка стандартных строк считает '11' меньше, чем' 2' и так далее. Если вам нужно, скажите '2/1980', который должен быть выдан до' 11/1980', вероятно, лучше разделить это поле на два и отсортировать соответственно. Также spltting столбец выглядит как лучшая идея с точки зрения дизайна базы данных, поскольку это приводит к более нормализованным данным. В настоящее время ваши значения полей выглядят так, будто вы комбинируете месяц и год в одном столбце строки. –
Я использую MS SQL Server 2014, и данные всегда такие «1/1980, 3000/1980' и т. Д. – user5603158