Решаем ошибку «TRIM не распознаётся» в SQL: причины и методы
Быстрый ответ
Если встречаете ошибку "TRIM не является встроенной функцией", вероятнее всего, вы работаете на SQL Server 2016 или ранних его версиях, где функция TRIM()
отсутствует. Для достижения желаемого результата может быть использована конструкция LTRIM(RTRIM(your_column))
:
SELECT LTRIM(RTRIM(your_column)) AS TrimmedColumn FROM your_table;
-- Зачем нам лишние пробелы?
Этот запрос обрежет все пробелы в столбце your_column
таблицы your_table
.
Такой ошибкой может быть вызван и низкий уровень совместимости базы данных. Уточните его при помощи следующего запроса:
SELECT compatibility_level FROM sys.databases WHERE name = 'YourDatabaseName';
-- SQL даст нам все ответы без догадок.
Если уровень совместимости ниже 140, функция TRIM()
станет доступной лишь после обновления SQL Server или уровня совместимости:
ALTER DATABASE YourDatabaseName SET COMPATIBILITY_LEVEL = 140;
-- Добро пожаловать в будущее, теперь у нас есть TRIM!
Подробное исследование
Создание собственной функции TRIM
Если обновление сервера является невозможным, есть альтернатива в виде создания собственной пользовательской функции:
CREATE FUNCTION dbo.TRIM(@string NVARCHAR(max))
RETURNS NVARCHAR(max) AS
BEGIN
RETURN LTRIM(RTRIM(@string))
-- LTRIM и RTRIM вместе эффективно работают как TRIM
END
GO
Её вызов выглядит так:
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
:
SELECT TRIM(' word ');
-- Эй, TRIM, тебе пора в работу!
Но SQL Server сообщает:
⚠️ "К сожалению, TRIM не входит в наш набор инструментов 🦸♂️"
И тут на выручку приходят LTRIM
и RTRIM
:
SELECT LTRIM(RTRIM(' word '));
-- Давайте использовать то, что у нас есть!
Прекрасно, пробелы удачно удалены, и без использования функции TRIM:
Было: [ ' word ' ]
Стало: ['word']
-- Задача выполнена с помощью имеющихся инструментов!
Удаление других пробельных символов
Важно помнить, что LTRIM()
и RTRIM()
удаляют только обычные пробелы. Для удаления других пробельных символов, таких как табуляция или перенос строки, потребуются более сложные методы, включая поиск по шаблону или регулярные выражения.
Преимущества функции TRIM в SQL Server 2017 и более новых версиях
В SQL Server 2017 и последующих версиях функция TRIM()
позволяет избавляться не только от пробелов, но и от конкретных символов. Например:
SELECT TRIM('x' FROM 'xxwordxx') AS TrimmedText;
-- Вот и явилась чистота без 'x'!
Полезные материалы
- TRIM (Transact-SQL) – SQL Server | Microsoft Learn — официальное руководство функции TRIM для SQL Server.
- ALTER DATABASE compatibility level (Transact-SQL) – SQL Server | Microsoft Learn — информация о уровнях совместимости в SQL Server.
- SQL Server TRIM() Function — синтаксис и примеры использования функции TRIM.
- SQL Server: RTRIM Function — руководство по использованию RTRIM, функции, в некоторой степени заменяющей TRIM.
- StackOverflow — сообщество, где можно найти вопросы и ответы, касающиеся использования TRIM в SQL Server.