Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
138 / 138 / 39
Регистрация: 26.02.2011
Сообщений: 545
1

Between

14.04.2016, 14:56. Показов 1078. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Если нужно вывести из столбца наименования , находящиеся в интервале с 'а' до 'в', я напишу
SQL
1
BETWEEN 'а' AND 'в'
и мне выдаст наименования , начинающиеся на 'а' и 'б', НО не на 'в'.

Вопрос такой, а как вывести на 'я'? то есть сделать интервал чтобы скажем с 'ч' до 'я', включительно чтобы вывел ? ведь после 'я' нет букв больше
0
Лучшие ответы (1)
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
14.04.2016, 15:03 2
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
и мне выдаст наименования , начинающиеся на 'а' и 'б', НО не на 'в'.
Смотря что именно "BETWEEN 'а' AND 'в'". Первая буква что ли?
Ознакомьтесь с оператором LIKE.
И почитайте про COLLATE. В некоторых случаях диапазон строковых значений
включает или не включает значения так, как вы, наверно, и не ожидаете.

Насчёт знака вопроса вообще ничего не понял.
1
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
14.04.2016, 15:11 3
Лучший ответ Сообщение было отмечено a.n.o.n.i.m как решение

Решение

На сколько я понимаю, проблема в том, что 'в' < 'ва'. Не вдаваясь в проблему оптимизации запроса, ваш подход можно переделать так:

SQL
1
BETWEEN 'а' AND 'вяяяяяяяяяяя'
"я" должно быть не меньше, чем максимальная длина строки в поле, по которому производится фильтрация - 1. Решение задачи с я аналогично.
1
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
14.04.2016, 15:34 4
Цитата Сообщение от YakobsEA Посмотреть сообщение
На сколько я понимаю, проблема в том, что 'в' < 'ва'. Не вдаваясь в проблему оптимизации запроса, ваш подход можно переделать так:

SQL
1
BETWEEN 'а' AND 'вяяяяяяяяяяя'
"я" должно быть не меньше, чем максимальная длина строки в поле, по которому производится фильтрация - 1. Решение задачи с я аналогично.
T-SQL
1
Field >='a' AND Field < 'г'
не точнее ли будет для такого случая?
Однако, почему не
T-SQL
1
Field LIKE '[абв]%'
?

По поводу COLLATION. Сравните:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT 'ё'
WHERE 'ё' COLLATE Cyrillic_General_BIN LIKE'[а-я]';
 
SELECT 'ё'
WHERE 'ё' COLLATE Cyrillic_General_BIN >= 'а' AND 'ё' COLLATE Cyrillic_General_BIN <= 'я';
 
SELECT 'ё'
WHERE 'ё' COLLATE Cyrillic_General_CS_AS LIKE'[а-я]';
 
SELECT 'ё'
WHERE 'ё' COLLATE Cyrillic_General_CS_AS >= 'а' AND 'ё' COLLATE Cyrillic_General_CS_AS <= 'я';
0
138 / 138 / 39
Регистрация: 26.02.2011
Сообщений: 545
14.04.2016, 15:56  [ТС] 5
Все , получил что хотел



SQL
1
BETWEEN 'ч' AND 'яя'
Выведет и названия на 'я'

Именно BETWEEN нужен был, мне нужно было понять как работает
0
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
14.04.2016, 17:01 6
iap, просто пояснял, почему у a.n.o.n.i.m данные именно так выбираются.
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
15.04.2016, 10:07 7
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
Все , получил что хотел



SQL
1
BETWEEN 'ч' AND 'яя'
Выведет и названия на 'я'

Именно BETWEEN нужен был, мне нужно было понять как работает
Почему же у меня ничего не возвращается?
T-SQL
1
SELECT 'яяя' WHERE 'яяя' BETWEEN 'а' AND 'яя';
0
138 / 138 / 39
Регистрация: 26.02.2011
Сообщений: 545
15.04.2016, 13:31  [ТС] 8
iap мы просто видать друг друга не поняли, еще подсказали вариант
SQL
1
SUBSTRING(f, 1, 1) BETWEEN 'a' AND 'в'
довольно интересный
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
15.04.2016, 13:52 9
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
iap мы просто видать друг друга не поняли, еще подсказали вариант
SQL
1
SUBSTRING(f, 1, 1) BETWEEN 'a' AND 'в'
довольно интересный
Лучше скажите, чем вас LIKE обидел.
Вместо SUBSTRING(f,1,1) короче LEFT(f,1).
1
138 / 138 / 39
Регистрация: 26.02.2011
Сообщений: 545
15.04.2016, 14:47  [ТС] 10
Ничем не обидел, я понять хотел как сделать в between это все
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,269
15.04.2016, 15:03 11
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
Ничем не обидел, я понять хотел как сделать в between это все
Как видим, с BETWEEN это сделать нельзя, если только не проверять функцию от поля.
0
15.04.2016, 15:03
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru