Почему LENGTH не принимает alias нового столбца как аргумент в SQL?

В SQL, особенно в некоторых базах данных, здравый смысл говорит нам, что функция LENGTH должна принимать аргументом столбец или значение, чтобы определить его длину или количество символов. Однако многие СУБД не поддерживают использование псевдонимов столбцов (alias) в качестве аргументов функций, включая функцию LENGTH.

Сначала давайте разберемся, что такое псевдоним столбца (alias). Псевдоним столбца - это временное имя, присваиваемое столбцу в результате выполнения запроса. Он позволяет нам ссылаться на столбец по другому имени, что может быть полезно для улучшения читаемости запроса или для решения конфликтов имен столбцов в соединенных таблицах.

Однако, хотя псевдонимы столбцов используются во фразе SELECT, они не являются доступными для использования в других частях запроса, таких как условия WHERE или в аргументе функции. Когда SQL-запрос обрабатывается, сначала происходит фаза выборки, где SELECT-фраза готовит результаты запроса, и только затем выполняется фаза фильтрации, где применяются условия WHERE.

Поэтому, когда мы пытаемся использовать псевдоним столбца в аргументе функции, например, функции LENGTH, СУБД не может распознать псевдоним, так как он еще не был создан на этом этапе выполнения запроса. Вместо этого, мы должны использовать реальное имя столбца или значение.

Примером может быть следующий запрос:

SELECT name AS full_name, LENGTH(full_name) AS name_length
FROM users
WHERE LENGTH(full_name) > 10;

В этом запросе мы создаем псевдоним "full_name" для столбца "name" в фразе SELECT. Затем мы пытаемся использовать этот псевдоним в функции LENGTH для определения длины полного имени. Однако, это вызовет ошибку, так как СУБД не может распознать псевдоним, когда обрабатывает функцию.

Чтобы решить эту проблему, мы можем использовать реальное имя столбца в функции LENGTH, как показано ниже:

SELECT name AS full_name, LENGTH(name) AS name_length
FROM users
WHERE LENGTH(name) > 10;

Здесь мы использовали реальное имя столбца "name" в аргументе функции LENGTH, чтобы правильно определить длину имени.

В заключение, функция LENGTH не может принимать псевдонимы столбцов в качестве аргументов в SQL, потому что псевдонимы столбцов не являются доступными во время выполнения функции. Чтобы использовать функцию LENGTH, вы должны указать реальное имя столбца или значение, чтобы определить его длину или количество символов.