TRIM (Transact-SQL) — SQL Server
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 3 мин
Применимо к: SQL Server 2017 (14. x) и более поздних версий Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse Analytics
Удаляет символ пробела char(32)
или другие заданные символы в начале и конце строки.
Начиная с версии SQL Server 2022 (16.x), при необходимости можно удалить пробел char(32)
или другие указанные символы из начала и (или) конца строки.
Соглашения о синтаксисе Transact-SQL
Синтаксис
Синтаксис для SQL Server и Базы данных SQL Azure:
TRIM ( [ characters FROM ] string )
Синтаксис для SQL Server 2022 (16.x) и более поздних версий:
Важно!
Чтобы использовать ключевые слова LEADING
, TRAILING
или BOTH
, вам потребуется задать для уровня совместимости базы данных значение 160.
TRIM ( [ LEADING | TRAILING | BOTH ] [characters FROM ] string )
Синтаксис для Базы данных SQL Azure:
TRIM ( [ characters FROM ] string )
Синтаксис для Azure Synapse Analytics:
TRIM ( string )
Примечание
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
[ LEADING | TRAILING | BOTH ]
Область применения: SQL Server 2022 (16.x) и более поздних версий.
Необязательный первый аргумент указывает, какую сторону строки следует обрезать:
LEADING отвечает за удаление символов, указанных в начале строки.
TRAILING отвечает за удаление символов, указанных в конце строки.
BOTH (поведение по умолчанию) отвечает за удаление символов, указанных в начале и конце строки.
Литерал, переменная или вызов функции любого типа данных, отличного от типа большого объекта (nvarchar
, varchar
, nchar
или char
), которые содержат удаляемые символы. Типы nvarchar(max)
и varchar(max)
не допускаются.
Выражение любого символьного типа (nvarchar
, varchar
, nchar
или char
), из которого следует удалить символы.
Типы возвращаемых данных
Возвращает символьное выражение с типом аргумента string, в котором символ пробела char(32)
или другие заданные символы удалены с обеих сторон. Возвращает NULL
, если входная строка равна NULL
.
По умолчанию функция TRIM
удаляет символ пробела как в начале, так и в конце строки. Такая реакция на событие эквивалентна LTRIM(RTRIM(@string))
.
Чтобы включить необязательные позиционные аргументы LEADING
, TRAILING
или BOTH
в SQL Server 2022 (16.x), включите уровень совместимости баз данных 160
в базах данных, к которым вы подключаетесь при выполнении запросов.
- При использовании необязательного позиционного аргумента
LEADING
поведение эквивалентноLTRIM(@string, characters)
. - При использовании необязательного позиционного аргумента
TRAILING
поведение эквивалентноRTRIM(@string, characters)
.
Примеры
A. Удаление пробела с обеих сторон строки
В приведенном ниже примере удаляются пробелы перед словом test
и после него.
SELECT TRIM( ' test ') AS Result;
Результирующий набор:
test
Б. Удаление указанных символов с обеих сторон строки
В следующем примере представлен список возможных символов для удаления из строки.
SELECT TRIM( '.,! ' FROM ' # test .') AS Result;
Результирующий набор:
# test
В этом примере удалены только конечная точка, а также пробелы перед символом #
и после слова test
. Другие символы были проигнорированы, так как их не было в строке.
В. Удаление указанных символов из начала строки
Важно!
Чтобы использовать ключевые слова LEADING
, TRAILING
или BOTH
, вам потребуется задать для уровня совместимости базы данных значение 160.
В следующем примере из начала строки удаляется начальный символ .
перед словом test
.
SELECT TRIM(LEADING '.,! ' FROM ' .# test .') AS Result;
Результирующий набор:
# test .
Г. Удаление указанных символов из конца строки
Важно!
Чтобы использовать ключевые слова LEADING
, TRAILING
или BOTH
, вам потребуется задать для уровня совместимости базы данных значение 160.
В следующем примере из конца строки удаляется конечный символ .
после слова test
.
SELECT TRIM(TRAILING '.,! ' FROM ' .# test .') AS Result;
Результирующий набор:
.# test
Д. Удаление указанных символов из начала и конца строки
Важно!
Чтобы использовать ключевые слова LEADING
, TRAILING
или BOTH
, вам потребуется задать для уровня совместимости базы данных значение 160.
В следующем примере символы 123
удаляются из начала и конца строки 123abc123
.
SELECT TRIM(BOTH '123' FROM '123abc123') AS Result;
Результирующий набор:
abc
См. также раздел
- LEFT (Transact-SQL)
- LTRIM (Transact-SQL)
- RIGHT (Transact-SQL)
- RTRIM (Transact-SQL)
- STRING_SPLIT (Transact-SQL)
- SUBSTRING (Transact-SQL)
- Строковые функции (Transact-SQL)
drop-constraint-if-exists-postgres — Google Suche
AlleBilderVideosBücherMapsNewsShopping
Suchoptionen
DROP CONSTRAINT IF EXISTS — PostgreSQL
www.postgresql.org › message-id
13.08.2010 · The sql statement ‘ALTER TABLE <table name> DROP CONSTRAINT IF EXISTS <constraint-name>’ returns with a syntax error on exists. The
Documentation: 9.0: ALTER TABLE — PostgreSQL
www.postgresql.org › docs › sql-altertable
This form adds a new constraint to a table using the same syntax as CREATE TABLE. DROP CONSTRAINT [ IF EXISTS ]. This form drops the specified constraint on a …
How to drop constraints in postgres? — sql — Stack Overflow
stackoverflow.com › questions › how-to-drop-const…
In Postgres you can use: ALTER TABLE custom_table DROP CONSTRAINT IF EXISTS fk_states_list;. You can also make sure the table exists:
Postgresql: DROP CONSTRAINT IF EXISTS not working
Postgres: Add constraint if it doesn’t already exist — Stack Overflow
Is it safe to drop a table column constraint in postgres — Stack Overflow
How to drop Postgres constraint if table exists? — sql — Stack Overflow
Weitere Ergebnisse von stackoverflow.com
Support DROP CONSTRAINT IF EXISTS for Postgres Dialect #8141
github.com › sqlalchemy › sqlalchemy › issues
15.06.2022 · Describe the use case Recently was using alembic.op.drop_constraint() and found that there was no way to implement «IF EXISTS.
How to drop foreign key in PostgreSQL — eduCBA
www. educba.com › … › PostgreSQL Tutorial
In the above syntax, we drop table statements to drop the foreign key constraint where if exists means if a specified table is present in a database and …
PostgreSQL: Unique Constraints — TechOnTheNet
www.techonthenet.com › postgresql › unique
The syntax for dropping a unique constraint in PostgreSQL is: ALTER TABLE table_name DROP CONSTRAINT constraint_name;. table_name: The name of the table to …
DROP CONSTRAINT | CockroachDB Docs
www.cockroachlabs.com › docs › stable › drop-con…
Use the ALTER CONSTRAINT statement to remove constraints from columns. … ALTER TABLE IF EXISTS table_name DROP CONSTRAINT IF EXISTS name CASCADE RESTRICT …
Postgres Pro Standard : Документация: 9.6: ALTER TABLE
postgrespro.ru › docs › postgrespro › sql-altertable
… TABLE [ IF EXISTS ] [ ONLY ] имя [ * ] RENAME CONSTRAINT имя_ограничения TO … CONSTRAINT имя_ограничения DROP CONSTRAINT [ IF EXISTS ] имя_ограничения . ..
Postgres — can’t drop constraint because objects depend on it even …
dba.stackexchange.com › questions › postgres-cant-…
The way PostgreSQL is implemented, a foreign key references a unique index on the target table, not a list of columns. If you have several …
Add and drop foreign key constraint — MacLochlainns Weblog
blog.mclaughlinsoftware.com › 2019/10/08 › postgr…
08.10.2019 · Postgres Foreign Constraints · Drop the big and little table if they exists. · Create the big and little tables: · Insert a non-compliant row in …
Ähnliche Suchanfragen
Postgres ADD constraint if not exists
ADD CONSTRAINT postgres
PostgreSQL DROP CONSTRAINT
Postgres DROP constraint cascade
PostgreSQL DROP COLUMN IF EXISTS
PostgreSQL DROP primary key
Postgres ALTER TABLE constraint
Postgres remove NOT NULL constraint
sql — Обрезать конечные пробелы с помощью PostgreSQL
Существует много различных невидимых символов. Многие из них имеют свойство WSpace=Y
(«пробел») в Юникоде. Но некоторые специальные символы не считаются «пробелами» и до сих пор не имеют видимого представления. Отличные статьи Википедии о пробелах (пунктуации) и пробельных символах должны дать вам представление.
Стандартная функция SQL trim()
по умолчанию обрезает только основной латинский символ пробела (Unicode: U+0020 / ASCII 32). То же самое с вариантами rtrim()
и ltrim()
. Ваш вызов также нацелен только на этот конкретный персонаж.
Вместо этого используйте регулярные выражения с regexp_replace()
.
Завершающий
Чтобы удалить все завершающие пробелы (но не пробелы внутри строки ):
ВЫБЕРИТЕ regexp_replace(eventdate, '\s+$', '') FROM eventdates;
Объяснение регулярного выражения:
\s
.
[[:space:]]
— набор пробельных символов — см. ограничения ниже
+
… 1 или более совпадений подряд $
… конец строкиДемонстрация:
SELECT regexp_replace('inner white ', '\s+$', '') || '|'9\SS)’) substring(eventdate, ‘(\S.*\S)’) — работает только для 2+ печатных символов
(
re
)
… Захват набора скобок
Эффективно берет первый непробельный символ и все до последнего непробельного символа, если доступно.
Есть еще несколько связанных символов, которые не классифицируются как «пробельные» в Unicode, поэтому не входят в класс символов [[:space:]]
.
Эти символы печатаются в pgAdmin как невидимые для меня символы: «монгольская гласная», «пробел нулевой ширины», «не присоединяемый нулевой ширины», «объединяющий нулевой ширины»:
SELECT E'\u180e', E'\u200B ', Е'\u200C', Е'\u200D'; '' | '' | '' | ''
Еще два, печатаются как видимые глифы в pgAdmin, но невидимые в моем браузере: «объединение слов», «неразрывный пробел нулевой ширины»:
SELECT E'\u2060', E'\uFEFF'; '' | ''
В конечном счете, то, будут ли символы отображаться невидимыми, также зависит от шрифта, используемого для отображения.
Чтобы удалить все эти , замените '\s'
на '[\s\u180e\u200B\u200C\u200D\u2060\uFEFF]'
или 900 [\s\s\u20003′ ]’ (обратите внимание на невидимые символы в конце!).
Пример вместо:
regexp_replace(eventdate, '\s+$', '')
использование:
regexp_replace (дата события, '[\s\u180e\u200B\u200C\u200D\u2060\uFEFF]+$', '')
или:
regexp_replace(eventdate, '[\s]+$', '') -- обратите внимание на невидимые символы
Ограничения
Существует также класс символов Posix [[:graph:]]
, который должен представлять «видимые символы». Пример:
substring(eventdate, '([[:graph:]].*[[:graph:]])')
Он надежно работает для символов ASCII в каждой настройке (где он сводится к [\x21-\x7E]
), но помимо этого вы в настоящее время (включая стр. 10) зависите от информации, предоставляемой базовой ОС (для определения ctype
) и, возможно, настройки локали.
Строго говоря, это относится к каждой ссылке на класс символов, но, кажется, больше разногласий с менее часто используемыми, такими как graph . Но вам, возможно, придется добавить больше символов в класс символов [[:space:]]
\s
), чтобы поймать все пробельные символы. Например: \u2007
, \u202f
и \u00a0
, похоже, тоже отсутствуют для @XiCoN JFS.Руководство:
В выражении в квадратных скобках имя класса символов, заключенное в
[:
и:]
обозначает список всех символов, принадлежащих этому сорт. Стандартные имена классов символов:alnum
,alpha
,Blank
,cntrl
,цифра
,графа
,нижняя
,печать
,точка
,пробел
,верхняя
,xцифра
. Они обозначают классов символов, определенных в ctype. Локаль может предоставлять другие.
Смелая упорная мина.
Также обратите внимание на это ограничение, которое было исправлено в Postgres 10:
Исправлена обработка класса символов регулярных выражений для больших символов. коды, особенно символы Юникода выше
U+7FF
(Том Лейн)Раньше такие символы никогда не распознавались как принадлежащие зависящие от локали классы символов, такие как
[[:alpha:]]
.
postgresql — функция TRIM() со связанным сервером
Задавать вопрос
спросил
Изменено 6 лет, 5 месяцев назад
Просмотрено 1к раз
У меня есть подключение к связанному серверу для postgresql
на sql server
. Я могу запустить это в Sql Server Select * from OpenQuery (LinkedServer, 'Select * from alphadawg')
, и это возвращает все результаты, но во второй раз, когда я пытаюсь добавить какие-либо функции, я начинаю получать ошибки. Например, если я хочу TRIM()
конечные пробелы поля
Выберите * из OPENQUERY(LinkedServer, 'Выберите TRIM (завершающий ' ' из ad.userid) как "Идентификатор пользователя" ОТ alphadawg ad')
Я получаю сообщение об ошибке
Сообщение 102, уровень 15, состояние 1, строка 5
Неверный синтаксис рядом с ‘ из ad.userid) как «Идентификатор пользователя»
Итак, возможно, проблема в том, что я пытаюсь выполнить postgresql на сервере Sql, поэтому я изменил синтаксис на
Выберите * из OPENQUERY(LinkedServer, 'Выберите RTRIM(ad.userid) как "Идентификатор пользователя" ОТ alphadawg ad')
Но потом выдало ошибку:
Поставщик OLE DB «MSDASQL» для связанного сервера «LinkedServer» вернул сообщение «Запрошенное преобразование не поддерживается».
Как можно использовать функцию TRIM()
со связанным серверным соединением между postgresql и SQL Server?
- postgresql
- sql-server-2008-r2
- связанный сервер
- отделка
7
В аргументе OPENQUERY
должны быть экранированы кавычки.
Тип возвращаемого значения для функции TRIM
— text
, поэтому вы должны привести его обратно к varchar.
Выберите * из OPENQUERY(LinkedServer, 'Выберите CAST(TRIM(завершение '' '' из ad.userid) AS varchar(8)) как "Идентификатор пользователя" ОТ alphadawg ad')
4
Возможно, вам придется использовать синтаксис SQL Server для этого. Выберите * из OPENQUERY(LinkedServer, 'ВЫБЕРИТЕ RTRIM(ad.UserId) AS [ID пользователя]' ОТ alphadawg AS [объявление])
ИЛИ
Выберите * из OPENQUERY(LinkedServer, 'ВЫБЕРИТЕ ЗАМЕНУ (RTRIM (ad. UserId),' ','') AS [ID пользователя]' ОТ alphadawg AS [объявление])
5
OPENQUERY выполняет данный запрос на удаленном сервере для получения запрошенных данных. Так что вы можете на SQL Server, если хотите, а также на PostgreSQL.
Чтобы обрезать PostgreSQL, ваш синтаксис неверен. Должен быть.
Выберите * из OPENQUERY(LinkedServer, 'Выберите TRIM(ad.userid) как [ID пользователя] ОТ alphadawg ad')
Для обрезки в SQL Server TRIM делится на LTRIM (обрезка по левому краю) и RTRIM (обрезка по правому краю). Поэтому вы должны использовать следующий запрос
Выберите RTRIM(LTRIM([ID пользователя])) из OPENQUERY(LinkedServer, 'Выберите ad.userid как [ID пользователя] ОТ alphadawg ad')
Спасибо
У меня нет тестовой среды, но я был бы удивлен, если бы следующее не работало…
Выберите RTRIM([ID пользователя]) [ID пользователя] из OPENQUERY(LinkedServer, 'Выберите ad.