Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / сравнение varchar строк с varchar строками / 22 сообщений из 22, страница 1 из 1
30.01.2019, 15:10
    #39767082
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
Товарищи, приветствую

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

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

Я не могу понять по какому принципу идет сравнение типов данных, в гугле четкого ответа не нашел.
...
Рейтинг: 0 / 0
30.01.2019, 15:13
    #39767087
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
Принцип называется... Collation.
...
Рейтинг: 0 / 0
30.01.2019, 15:17
    #39767097
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
aleks222Принцип называется... Collation.

а вы не могли бы в двух словах на моем примере рассказать как получается такое итоговое множество?
...
Рейтинг: 0 / 0
30.01.2019, 15:27
    #39767108
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
dermamaaleks222Принцип называется... Collation.

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

в двух словах так: см. свой месыджь, там всё написано.
...
Рейтинг: 0 / 0
30.01.2019, 15:28
    #39767110
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
dermamaaleks222Принцип называется... Collation.

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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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;
...
Рейтинг: 0 / 0
30.01.2019, 15:29
    #39767112
Massa52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
dermama,
А как вы представляете сравнение(упорядочивание) символьных данных?
...
Рейтинг: 0 / 0
30.01.2019, 15:38
    #39767129
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
dermama,

согласно collate раздаются веса всему и итог сравнивают
...
Рейтинг: 0 / 0
30.01.2019, 15:50
    #39767148
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
dermamaaleks222Принцип называется... Collation.

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

?

Сравниваются символы слева направо, пока не встретятся разные в двух словах.
Тогда слово больше, если этот символ в этом слове больше.
Если такого символа не встретится, то больше считается более длинное слово. Иначе - равны.
В некоторых COLLATE обеспечивается сравнение не только одиночных символов, но и сочетаний символов.
Например, 'SH', 'CH', 'PH', которые в английском языке соответствуют одному звуку.
...
Рейтинг: 0 / 0
30.01.2019, 16:05
    #39767167
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
iapdermamaпропущено...


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

?

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


(No column name)
SQL_Latin1_General_CP1_CI_AS


Спасибо , буду разбираться!
...
Рейтинг: 0 / 0
30.01.2019, 17:15
    #39767225
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
iapdermamaпропущено...


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

?

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

все. - разобрался! спасибо за помощь.
...
Рейтинг: 0 / 0
31.01.2019, 10:33
    #39767427
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
TaPaKсогласно collate раздаются веса всему и итог сравнивают

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

Что же автору вопроса непонятно в принципе сортировки - лично я понять не могу. Обычная сортировка текста...
...
Рейтинг: 0 / 0
31.01.2019, 10:38
    #39767431
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
AndrFTaPaKсогласно collate раздаются веса всему и итог сравнивают

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

Что же автору вопроса непонятно в принципе сортировки - лично я понять не могу. Обычная сортировка текста...
Впечатляет
...
Рейтинг: 0 / 0
31.01.2019, 10:47
    #39767436
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
TaPaKВпечатляет

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

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

В результате телефонный справочник конторы в 300 номеров сортировался пузырьком аж полчаса (в качестве языка был вшитый интерпретатор Basic-a). Вот это впечатляло. Кстати, это была у меня самая долгая по времени задача в то время. Обычные расчеты выполнялись быстро и определялись в основном скоростью вывода на термопечать.
...
Рейтинг: 0 / 0
31.01.2019, 11:11
    #39767451
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
AndrFTaPaKВпечатляет

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

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

В результате телефонный справочник конторы в 300 номеров сортировался пузырьком аж полчаса (в качестве языка был вшитый интерпретатор Basic-a). Вот это впечатляло. Кстати, это была у меня самая долгая по времени задача в то время. Обычные расчеты выполнялись быстро и определялись в основном скоростью вывода на термопечать.Вот когда-то тема была глюк при сравнении строк
Внутри есть и ссылки интересные
...
Рейтинг: 0 / 0
31.01.2019, 11:16
    #39767453
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
AndrFTaPaKВпечатляет

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


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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT 
*
FROM sys.objects
ORDER BY name COLLATE Latin1_General_CS_AI

SELECT 
*
FROM sys.objects
ORDER BY name COLLATE Latin1_General_BIN
...
Рейтинг: 0 / 0
31.01.2019, 11:24
    #39767460
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
TaPaK
Код: sql
1.
ORDER BY name COLLATE Latin1_General_BIN



Грубо говоря - сортировка без учета регистра. Ни разу не доводилось применять...
...
Рейтинг: 0 / 0
31.01.2019, 11:27
    #39767464
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
AndrFTaPaK
Код: sql
1.
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.
...
Рейтинг: 0 / 0
31.01.2019, 11:28
    #39767465
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
Но опять же Cyrillic_General_BIN и Latin1_General_BIN в вышеприведенном примере дадут одинаковый результат. Пока среди списка сортируемых слов не появятся слова, например, на кириллице...
...
Рейтинг: 0 / 0
31.01.2019, 11:30
    #39767466
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
AndrFНо опять же Cyrillic_General_BIN и Latin1_General_BIN в вышеприведенном примере дадут одинаковый результат. Пока среди списка сортируемых слов не появятся слова, например, на кириллице...
хватит придумывать 14604590
...
Рейтинг: 0 / 0
31.01.2019, 11:32
    #39767468
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
TaPaKМожет хватит придумывать...

Для символов латиницы верно то что я написал - что не так? Хотя, конечно, можно придраться и вспомнить другие символы...
...
Рейтинг: 0 / 0
31.01.2019, 11:33
    #39767469
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
AndrFTaPaKМожет хватит придумывать...

Для символов латиницы верно то что я написал - что не так? Хотя, конечно, можно придраться и вспомнить другие символы...
какой упорный
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
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
*/
...
Рейтинг: 0 / 0
01.02.2019, 20:35
    #39768498
pahanitto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнение varchar строк с varchar строками
вопрос на самом деле в другом.... а зачем ты делаешь что-то>что-то ?
что ты хотел получить?
на то LIKE есть = есть и тд.... сравнение строк дело неблагодарное...
а как говорили коллейшен ... то да.... разные цыфирки на каждую буковку если совсем просто... а сравнивает то цифирки
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / сравнение varchar строк с varchar строками / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]