Member 12068587 Ответов: 2

Когда я запускаю этот запрос, он показывает start first_name from a, B и c...но не показывает first_name start from D why...


when I run this query, it's showing start First_Name from A,B and C...but not showing First_Name start from D why...


Что я уже пробовал:

select * from Employee where First_Name between 'A' and 'D' 

2 Ответов

Рейтинг:
12

Patrice T

Цитата:
Когда я запускаю этот запрос, он показывает start first_name from a, B и c...но не показывает first_name start from D why...

Потому что 'D anuthing' > 'D'
Попробуй
select * from Employee where First_Name between 'A' and 'E'


Рейтинг:
12

OriginalGriff

Потому что он использует сравнение строк.
Когда вы сравниваете строки, они сравниваются символ за символом, и результат всего сравнения исходит из первой разницы в паре.
Поэтому, когда вы сравниваете "а" с "Эндрю", " а "ниже, потому что первое различие заключается в том, что" а "заканчивается перед "Эндрю". Когда вы добираетесь до "D", происходит то же самое: "D" идет перед любой строкой, начинающейся с "D". Поскольку BETWEEN указывает конец последовательности, ни одно имя, начинающееся с буквы "D", но имеющее более одной буквы, не будет находиться в этом диапазоне.
Либо используйте подстроку для извлечения первого символа, либо используйте "Е" в качестве верхнего предела и добавьте специальную проверку, чтобы исключить имена, которые являются просто "Е".