Решаем ошибку «TRIM не распознаётся» в SQL: причины и методы

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если встречаете ошибку "TRIM не является встроенной функцией", вероятнее всего, вы работаете на SQL Server 2016 или ранних его версиях, где функция TRIM() отсутствует. Для достижения желаемого результата может быть использована конструкция LTRIM(RTRIM(your_column)):

SQL
Скопировать код
SELECT LTRIM(RTRIM(your_column)) AS TrimmedColumn FROM your_table;
 -- Зачем нам лишние пробелы?

Этот запрос обрежет все пробелы в столбце your_column таблицы your_table.

Такой ошибкой может быть вызван и низкий уровень совместимости базы данных. Уточните его при помощи следующего запроса:

SQL
Скопировать код
SELECT compatibility_level FROM sys.databases WHERE name = 'YourDatabaseName';
 -- SQL даст нам все ответы без догадок.

Если уровень совместимости ниже 140, функция TRIM() станет доступной лишь после обновления SQL Server или уровня совместимости:

SQL
Скопировать код
ALTER DATABASE YourDatabaseName SET COMPATIBILITY_LEVEL = 140;
 -- Добро пожаловать в будущее, теперь у нас есть TRIM!
Кинга Идем в IT: пошаговый план для смены профессии

Подробное исследование

Создание собственной функции TRIM

Если обновление сервера является невозможным, есть альтернатива в виде создания собственной пользовательской функции:

SQL
Скопировать код
CREATE FUNCTION dbo.TRIM(@string NVARCHAR(max))
RETURNS NVARCHAR(max) AS
BEGIN
    RETURN LTRIM(RTRIM(@string))
 -- LTRIM и RTRIM вместе эффективно работают как TRIM
END
GO

Её вызов выглядит так:

SQL
Скопировать код
SELECT dbo.TRIM(your_column) AS TrimmedColumn FROM your_table;
 -- Теперь обновление SQL нам не обязательно. Отлично!

Подробнее о функциях TRIM, RTRIM и LTRIM

Функция TRIM() – это очень удобный инструмент в SQL Server 2017 и более новых версиях для удаления пробелов в начале и конце строки. В более ранних версиях данного результата можно достичь использованием функций LTRIM() и RTRIM():

  • LTRIM() помогает удалять пробелы в начале строки.
  • RTRIM() справляется с пробелами в конце строки.

Обе эти функции вместе способны заменить функцию TRIM().

Визуализация

Понимание, почему TRIM не распознаётся в некоторых версиях SQL Server, облегчит следующая аналогия.

Представим функции SQL Server как набор инструментов:

Набор инструментов SQL 🦸‍♂️: [🔒, 🔧, ✂️, 🖋️, ❌TRIM]

Вы пытаетесь использовать TRIM:

SQL
Скопировать код
SELECT TRIM(' word ');
 -- Эй, TRIM, тебе пора в работу!

Но SQL Server сообщает:

⚠️ "К сожалению, TRIM не входит в наш набор инструментов 🦸‍♂️"

И тут на выручку приходят LTRIM и RTRIM:

SQL
Скопировать код
SELECT LTRIM(RTRIM(' word '));
 -- Давайте использовать то, что у нас есть!

Прекрасно, пробелы удачно удалены, и без использования функции TRIM:

Было: [ ' word ' ]
Стало: ['word']
 -- Задача выполнена с помощью имеющихся инструментов!

Удаление других пробельных символов

Важно помнить, что LTRIM() и RTRIM() удаляют только обычные пробелы. Для удаления других пробельных символов, таких как табуляция или перенос строки, потребуются более сложные методы, включая поиск по шаблону или регулярные выражения.

Преимущества функции TRIM в SQL Server 2017 и более новых версиях

В SQL Server 2017 и последующих версиях функция TRIM() позволяет избавляться не только от пробелов, но и от конкретных символов. Например:

SQL
Скопировать код
SELECT TRIM('x' FROM 'xxwordxx') AS TrimmedText;
 -- Вот и явилась чистота без 'x'!

Полезные материалы

  1. TRIM (Transact-SQL) – SQL Server | Microsoft Learnофициальное руководство функции TRIM для SQL Server.
  2. ALTER DATABASE compatibility level (Transact-SQL) – SQL Server | Microsoft Learn — информация о уровнях совместимости в SQL Server.
  3. SQL Server TRIM() Functionсинтаксис и примеры использования функции TRIM.
  4. SQL Server: RTRIM Function — руководство по использованию RTRIM, функции, в некоторой степени заменяющей TRIM.
  5. StackOverflowсообщество, где можно найти вопросы и ответы, касающиеся использования TRIM в SQL Server.