SQL BETWEEN для текстовых и числовых значений

BETWEEN используется в WHERE для выбора диапазона данных между двумя значениями.
Если я прав, исключена ли конечная точка диапазона или нет, это конкретная СУБД.
Что я не могу понять в следующем:
Если у меня есть таблица значений, и я делаю следующий запрос:

SELECT food_name FROM health_foods WHERE calories BETWEEN 33 AND 135;

Запрос возвращается в виде строк результатов, включая калории = 33 и калории = 135 (т. Е. Конечные точки диапазона включены ).

Но если я это сделаю:
SELECT food_name FROM health_foods WHERE food_name BETWEEN 'G' AND 'O';

Я не получаю строки с именем food_name, начиная с O Т.е. конец диапазона исключается .
Чтобы запрос работал должным образом, я печатаю:
SELECT food_name FROM health_foods WHERE food_name BETWEEN 'G' AND 'P';

Мой вопрос: почему существует такая разница для BETWEEN для чисел и текстовых данных?

Между работает точно так же для чисел и символов. Две конечные точки включены. Это часть стандарта ANSI, так что все диалоги SQL работают.

Выражение:

 where num between 33 and 135 

будет соответствовать, когда число равно 135. Оно не будет соответствовать, когда число равно 135.00001.

Аналогично, выражение:

 where food_name BETWEEN 'G' AND 'O' 

будет соответствовать 'O', но не любая другая строка, начинающаяся с 'O'.

Как только простой kludge должен использовать «~». Это самое большое 7-битное значение ASCII, поэтому для англоязычных приложений оно обычно работает хорошо:

 where food_name between 'G' and 'O~' 

Вы также можете заниматься различными делами. Вот две идеи:

 where left(food_name, 1) between 'G' and 'O' where food_name >= 'G' and food_name < 'P' 

Важным моментом является то, что between работами одинаково, независимо от типа данных.

Возьмем пример «Оранжевый» против «O». Строка «Оранжевый» явно не равна строке «O», и, поскольку она длиннее, она должна быть больше, не меньше.

Вы могли бы сделать «Оранжевый» <'OZZZZZZZZZZZZZZ'.

попробуйте это с помощью REGEX

  WHERE food_name REGEXP '^[GO]'; 

это дает вам все food_name, которое начинается с G до тех, кто начинает с O

ДЕМО ЗДЕСЬ