Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL Server - сортировка по первому вхождению символа раз делителя  [new]
ilovemutu
Member

Откуда:
Сообщений: 18
Имеются данные, которые заносят в таблицу. Самый главный столбец, по которому необходимо реализовать сортировку - № чертежа. Чертеж может быть записан по разному (начинаться с цифр или начинаться с букв, если начинается с букв, то название состоит из двух основных частей и разделяется каким-то символом - точкой, тире, пробелом, слешем) например:

СК-123, СК-124, С-1234, М-123-123, К.12, ЭСКИЗ 1234, 234567.23 и т.д.

Необходимо каким-то образом отделить первую часть в № чертежа, то есть ту, что находится слева до первого вхождения одного из символов и сделать сортировку по алфавиту сначало по ней, а затем по второй части уже по дате добавления в таблицу. Заранее спасибо за помощь!
27 мар 16, 23:43    [18984686]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
ilovemutu,
Создать поле с номером и отдельно хранить.
Индексы и прочие прелести можно будет использовать
28 мар 16, 00:25    [18984729]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
По теме: В скл не так много удобств для парсинга строк.
Patindex, substring, like
Если скорость совсем не нужна
28 мар 16, 00:27    [18984732]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
Col
Member

Откуда: Торонто
Сообщений: 180
ilovemutu,

Ничего не понял.
Зачем отделять то?
Допишитe в запросе ORDER BY и будет Вам сортировка:
https://msdn.microsoft.com/en-us/library/ms188385.aspx
Чего еще надо то?
28 мар 16, 00:34    [18984739]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
ilovemutu
слева до первого вхождения одного из символов и сделать сортировку по алфавиту сначало по ней, а затем по второй части уже по дате добавления в таблицу.
Непонятно, по скольким частям делать сортировку?
Нужно ли дополнительно сортировать ещё и по другим полям?
Могут ли быть эти номера неуникальными, то есть одинаковыми у разных чертежей?
И могут ли в этом поле после этих частей быть ещё какие то символы, по которым сортировать не надо?

В общем, больше информации, примеров, точнее описывайте правила сортировки.
28 мар 16, 02:03    [18984780]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
ilovemutu
Member

Откуда:
Сообщений: 18
Сортировку должна осуществляться только по номеру чертежа. Он не всегда уникален. Попробую привести пример как данные вносят в таблицу и что должно получиться на выходе. Допустим, данные внесли в таком порядке:
СК-123,
СК-123,
СК-122,
СК-120,
М-11111,
М-22222,
ЭСКИЗ.123,
654321.123456,
123456.654321
Что мне надо на выходе:
123456.654321,
654321.123456,
М-11111,
М-22222,
СК-123,
СК-123,
СК-122,
СК-120,
ЭСКИЗ.123


То есть получается, по левой части чертежа (то что слева от первого разделителя) данные сначала сортируются по алфавиту, затем сортировка идет по правой части по дате добавления.
28 мар 16, 07:01    [18984844]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
Glory
Member

Откуда:
Сообщений: 104751
ilovemutu
То есть получается, по левой части чертежа (то что слева от первого разделителя) данные сначала сортируются по алфавиту, затем сортировка идет по правой части по дате добавления.

Что такое "первый разделитель" ? Их у вас много разных ? Или у них есть общий признак ?
28 мар 16, 08:32    [18984909]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
Добрый Э - Эх
Guest
Glory
Что такое "первый разделитель" ? Их у вас много разных ? Или у них есть общий признак ?
ilovemutu
если начинается с букв, то название состоит из двух основных частей и разделяется каким-то символом - точкой, тире, пробелом, слешем

Думается, всё что не буква и не цифра - всё разделитель.




ilovemutu

...
СК-120,
М-11111,
...
ЭСКИЗ.123,
654321.123456
...

затем сортировка идет по правой части по дате добавления.
что/где здесь дата?
28 мар 16, 08:42    [18984921]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
ilovemutu
Member

Откуда:
Сообщений: 18
Ну имеется ввиду дата- в каком порядке загружен в базу. Когда по начальным символам (по буквам ) уже отсортировалось, тогда должно сортироваться просто по дате добавления, в конец записываться
28 мар 16, 09:36    [18985063]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
Glory
Member

Откуда:
Сообщений: 104751
ilovemutu
тогда должно сортироваться просто по дате добавления, в конец записываться

У вас таблица из одного символьного поля, в котором хранится все ?
28 мар 16, 09:40    [18985081]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
ilovemutu
Member

Откуда:
Сообщений: 18
В таблице полей много. Но по ним не нужно сортировать. Поле номер чертежа - varchar2
28 мар 16, 09:52    [18985137]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
Glory
Member

Откуда:
Сообщений: 104751
ilovemutu
Поле номер чертежа - varchar2

Оракл - это другая СУБД
28 мар 16, 09:53    [18985140]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
ilovemutu
Member

Откуда:
Сообщений: 18
Glory,

Да извиняюсь, у меня oracle
28 мар 16, 10:20    [18985260]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
ilovemutu,

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

А нам-то это всё не видно. И вон как, оказывается, - сервер не соответствует форуму.
28 мар 16, 10:23    [18985268]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
ilovemutu
То есть получается, по левой части чертежа (то что слева от первого разделителя) данные сначала сортируются по алфавиту, затем сортировка идет по правой части по дате добавления.
По вашему описанию получается, что вам нужна просто сортировка по полю.
Потому что отсортировать сначала по первой части, а потом по второй - это то же самое, что и отсортировать по строке целиком.

ilovemutu
Glory,

Да извиняюсь, у меня oracle
Мда :-)

Впрочем, в данном случае ИМХО неважно, ответ одинаковый.
28 мар 16, 11:47    [18985624]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
ilovemutu
Ну имеется ввиду дата- в каком порядке загружен в базу. Когда по начальным символам (по буквам ) уже отсортировалось, тогда должно сортироваться просто по дате добавления, в конец записываться
Ну вот и сортируйте по вашему номеру и дате, для любой субд это будет: ORDER BY ПолеНомер, ПолеДата
28 мар 16, 11:50    [18985638]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
alexeyvg
отсортировать сначала по первой части, а потом по второй - это то же самое, что и отсортировать по строке целиком.
Это если длины частей постоянные, дополненные каким-нибудь символом (пробелом)
для выравнивания по какому-нибудь краю (для символьной строки - по левому)
28 мар 16, 11:52    [18985653]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
iap
alexeyvg
отсортировать сначала по первой части, а потом по второй - это то же самое, что и отсортировать по строке целиком.
Это если длины частей постоянные, дополненные каким-нибудь символом (пробелом)
для выравнивания по какому-нибудь краю (для символьной строки - по левому)
По моему, нет, при условии, что разделитель младше любого символа, и одинаковый везде...
Правда, разделители у ТС произвольные, так что нужно выковыривать эти "части"...
28 мар 16, 12:08    [18985739]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server - сортировка по первому вхождению символа раз делителя  [new]
sergeimv
Member

Откуда: Россия, г.Казань
Сообщений: 42
Можно добавить вычислимую колонку, которая будет равна значению до разделителя.
if object_id('tempdb..#t') is not null 
	drop table #t

create table #t(
	Number varchar(150), 
	InsertDate datetime, 
	Brief as
		case
			when
				patindex('%[^а-яА-ЯёйЙЁa-zA-Z0-9]%', Number) > 0
			then
				left(Number, patindex('%[^а-яА-ЯёйЙЁa-zA-Z0-9]%', Number) - 1)
			else
				Number
		end persisted)

insert into #t
values
	('СК-123', getdate() + 1),
	('СК-123', getdate() + 2),
	('СК-122', getdate() + 3),
	('СК-120', getdate() + 4),
	('М-11111',  getdate() + 5),
	('МЙ-22222', getdate() + 6),
	('ЭСКИЗ.123', getdate() + 7),
	('654321.123456', getdate() + 8),
	('123456.654321', getdate() + 9)

select 
	* 
from 
	#t 
order by 
	Brief, InsertDate


Если табличка большая и по этому полю делаются запросы, то нужно создать её как persisted с возможностью создания по ней индекса.
28 мар 16, 18:07    [18987802]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить