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

Откуда:
Сообщений: 222
Товарищи, приветствую

имеется таблица, и запрос к ней

CREATE TABLE rela
(
predator varchar(10),
prey varchar(10)
)
INSERT INTO rela
VALUES
('mouse', 'cheese'),
('cat', 'mouse'),
('cat', 'bird'),
('dog', 'cat'),
('mouse', 'elephant'),
('lion', 'zebra')

SELECT * FROM rela
WHERE predator >= prey;

Результат

predator prey
mouse cheese
cat bird
dog cat
mouse elephant

Я не могу понять по какому принципу идет сравнение типов данных, в гугле четкого ответа не нашел.
30 янв 19, 15:10    [21797866]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
aleks222
Member

Откуда:
Сообщений: 850
Принцип называется... Collation.
30 янв 19, 15:13    [21797874]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
dermama
Member

Откуда:
Сообщений: 222
aleks222
Принцип называется... Collation.


а вы не могли бы в двух словах на моем примере рассказать как получается такое итоговое множество?
30 янв 19, 15:17    [21797888]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3458
dermama
aleks222
Принцип называется... Collation.


а вы не могли бы в двух словах на моем примере рассказать как получается такое итоговое множество?


в двух словах так: см. свой месыджь, там всё написано.
30 янв 19, 15:27    [21797914]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
aleks222
Member

Откуда:
Сообщений: 850
dermama
aleks222
Принцип называется... Collation.


а вы не могли бы в двух словах на моем примере рассказать как получается такое итоговое множество?


В двух словах:
Ты не парься, ты просто ORDER BY напиши.

CREATE TABLE t (x varchar(10) );
INSERT INTO x
VALUES
('mouse'
, ('cheese')
, ('cat')
, ('bird'),
, ('dog')
, ('elephant'),
, ('lion')
, ('zebra')
;
SELECT x FROM t ORDER BY x;
30 янв 19, 15:28    [21797916]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
Massa52
Member

Откуда:
Сообщений: 373
dermama,
А как вы представляете сравнение(упорядочивание) символьных данных?
30 янв 19, 15:29    [21797918]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
dermama,

согласно collate раздаются веса всему и итог сравнивают
30 янв 19, 15:38    [21797936]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
iap
Member

Откуда: Москва
Сообщений: 46952
dermama
aleks222
Принцип называется... Collation.


а вы не могли бы в двух словах на моем примере рассказать как получается такое итоговое множество?
Вы даже не говорите, какой COLLATE у вашей базы.
Что возвращает
SELECT DATABASEPROPERTYEX(DB_NAME(),'Collation')
?

Сравниваются символы слева направо, пока не встретятся разные в двух словах.
Тогда слово больше, если этот символ в этом слове больше.
Если такого символа не встретится, то больше считается более длинное слово. Иначе - равны.
В некоторых COLLATE обеспечивается сравнение не только одиночных символов, но и сочетаний символов.
Например, 'SH', 'CH', 'PH', которые в английском языке соответствуют одному звуку.
30 янв 19, 15:50    [21797958]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
dermama
Member

Откуда:
Сообщений: 222
iap
dermama
пропущено...


а вы не могли бы в двух словах на моем примере рассказать как получается такое итоговое множество?
Вы даже не говорите, какой COLLATE у вашей базы.
Что возвращает
SELECT DATABASEPROPERTYEX(DB_NAME(),'Collation')
?

Сравниваются символы слева направо, пока не встретятся разные в двух словах.
Тогда слово больше, если этот символ в этом слове больше.
Если такого символа не встретится, то больше считается более длинное слово. Иначе - равны.
В некоторых COLLATE обеспечивается сравнение не только одиночных символов, но и сочетаний символов.
Например, 'SH', 'CH', 'PH', которые в английском языке соответствуют одному звуку.



(No column name)
SQL_Latin1_General_CP1_CI_AS


Спасибо , буду разбираться!
30 янв 19, 16:05    [21797978]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
dermama
Member

Откуда:
Сообщений: 222
iap
dermama
пропущено...


а вы не могли бы в двух словах на моем примере рассказать как получается такое итоговое множество?
Вы даже не говорите, какой COLLATE у вашей базы.
Что возвращает
SELECT DATABASEPROPERTYEX(DB_NAME(),'Collation')
?

Сравниваются символы слева направо, пока не встретятся разные в двух словах.
Тогда слово больше, если этот символ в этом слове больше.
Если такого символа не встретится, то больше считается более длинное слово. Иначе - равны.
В некоторых COLLATE обеспечивается сравнение не только одиночных символов, но и сочетаний символов.
Например, 'SH', 'CH', 'PH', которые в английском языке соответствуют одному звуку.


все. - разобрался! спасибо за помощь.
30 янв 19, 17:15    [21798073]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
AndrF
Member

Откуда:
Сообщений: 2183
TaPaK
согласно collate раздаются веса всему и итог сравнивают


В конкретном случае использована латиница, так что с любым Collation результат должен быть один. Я, вроде, не ошибаюсь?

Что же автору вопроса непонятно в принципе сортировки - лично я понять не могу. Обычная сортировка текста...
31 янв 19, 10:33    [21798502]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
AndrF
TaPaK
согласно collate раздаются веса всему и итог сравнивают


В конкретном случае использована латиница, так что с любым Collation результат должен быть один. Я, вроде, не ошибаюсь?

Что же автору вопроса непонятно в принципе сортировки - лично я понять не могу. Обычная сортировка текста...

Впечатляет
31 янв 19, 10:38    [21798506]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
AndrF
Member

Откуда:
Сообщений: 2183
TaPaK
Впечатляет


Что конкретно впечатляет-то?

Во времена былые и древние, когда еще не было персоналок от IBM, я сортировал текст переводя первые пять букв слова в число и сортируя уже числа. Все из-за того что локализаторы клона персоналки от HP не добрались до функции сравнения текста на русском.

В результате телефонный справочник конторы в 300 номеров сортировался пузырьком аж полчаса (в качестве языка был вшитый интерпретатор Basic-a). Вот это впечатляло. Кстати, это была у меня самая долгая по времени задача в то время. Обычные расчеты выполнялись быстро и определялись в основном скоростью вывода на термопечать.
31 янв 19, 10:47    [21798512]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
iap
Member

Откуда: Москва
Сообщений: 46952
AndrF
TaPaK
Впечатляет


Что конкретно впечатляет-то?

Во времена былые и древние, когда еще не было персоналок от IBM, я сортировал текст переводя первые пять букв слова в число и сортируя уже числа. Все из-за того что локализаторы клона персоналки от HP не добрались до функции сравнения текста на русском.

В результате телефонный справочник конторы в 300 номеров сортировался пузырьком аж полчаса (в качестве языка был вшитый интерпретатор Basic-a). Вот это впечатляло. Кстати, это была у меня самая долгая по времени задача в то время. Обычные расчеты выполнялись быстро и определялись в основном скоростью вывода на термопечать.
Вот когда-то тема была глюк при сравнении строк
Внутри есть и ссылки интересные
31 янв 19, 11:11    [21798536]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
AndrF
TaPaK
Впечатляет


Что конкретно впечатляет-то?


автор
использована латиница, так что с любым Collation результат должен быть один.


SELECT 
*
FROM sys.objects
ORDER BY name COLLATE Latin1_General_CS_AI

SELECT 
*
FROM sys.objects
ORDER BY name COLLATE Latin1_General_BIN
31 янв 19, 11:16    [21798538]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
AndrF
Member

Откуда:
Сообщений: 2183
TaPaK
ORDER BY name COLLATE Latin1_General_BIN


Грубо говоря - сортировка без учета регистра. Ни разу не доводилось применять...
31 янв 19, 11:24    [21798547]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
AndrF
TaPaK
ORDER BY name COLLATE Latin1_General_BIN


Грубо говоря - сортировка без учета регистра. Ни разу не доводилось применять...

Может хватит придумывать...

автор
Binary collations sort data based on the sequence of coded values that are defined by the locale and data type. They are case sensitive.
31 янв 19, 11:27    [21798551]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
AndrF
Member

Откуда:
Сообщений: 2183
Но опять же Cyrillic_General_BIN и Latin1_General_BIN в вышеприведенном примере дадут одинаковый результат. Пока среди списка сортируемых слов не появятся слова, например, на кириллице...
31 янв 19, 11:28    [21798553]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
AndrF
Но опять же Cyrillic_General_BIN и Latin1_General_BIN в вышеприведенном примере дадут одинаковый результат. Пока среди списка сортируемых слов не появятся слова, например, на кириллице...

хватит придумывать 14604590
31 янв 19, 11:30    [21798555]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
AndrF
Member

Откуда:
Сообщений: 2183
TaPaK
Может хватит придумывать...


Для символов латиницы верно то что я написал - что не так? Хотя, конечно, можно придраться и вспомнить другие символы...
31 янв 19, 11:32    [21798558]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
AndrF
TaPaK
Может хватит придумывать...


Для символов латиницы верно то что я написал - что не так? Хотя, конечно, можно придраться и вспомнить другие символы...

какой упорный
select 'A'  collate Cyrillic_General_CI_AS union all
select 'B'  collate Cyrillic_General_CI_AS union all
select 'aa' collate Cyrillic_General_CI_AS union all
select 'bb' collate Cyrillic_General_CI_AS
order by 1
/*
A
aa
B
bb
*/

select 'A'  collate Latin1_General_Bin union all
select 'B'  collate Latin1_General_Bin union all
select 'aa' collate Latin1_General_Bin union all
select 'bb' collate Latin1_General_Bin
order by 1
/*
A
B
aa
bb
*/
31 янв 19, 11:33    [21798561]     Ответить | Цитировать Сообщить модератору
 Re: сравнение varchar строк с varchar строками  [new]
pahanitto
Member

Откуда:
Сообщений: 28
вопрос на самом деле в другом.... а зачем ты делаешь что-то>что-то ?
что ты хотел получить?
на то LIKE есть = есть и тд.... сравнение строк дело неблагодарное...
а как говорили коллейшен ... то да.... разные цыфирки на каждую буковку если совсем просто... а сравнивает то цифирки
1 фев 19, 20:35    [21800142]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить