Функцията TRIM на SQL Server е предназначена за премахване на водещи и крайни бели интервали от символен низ. Водещо пространство е празно пространство, което се появява преди действителния низ. След това се появява крайно пространство.
В тази статия ще разгледаме функцията TRIM и ще илюстрираме нейното използване с практически примери. И така, нека започнем от основите.
Функция TRIM в SQL Server
SQL TRIM е вградена функция, която ни позволява да отрежем ненужните знаци от двете страни на низа с едно действие. Най-често го използваме за премахване на бели интервали. Тази функция се появи в SQL Server 2017, а сега присъства и в Azure SQL база данни.
Синтаксисът на функцията SQL TRIM е както следва:
ОТРЕЗИ ( низ от [ символи ОТ ] )
- знаци ОТ е по избор параметър, който определя кои знаци трябва да изтрием. По подразбиране този параметър се прилага за интервали от двете страни на нашия низ.
- низ е задължителен параметър, който определя низа, където трябва да се отървем от интервали/други ненужни знаци.
Върнатият изход е низ без тези знаци, които определихме да бъдат изрязани в началото и в края. Вижте примера:
SELECT TRIM( ' example ') AS Result;
Резултатът е:
пример
Както споменахме, функцията TRIM може да премахне и други знаци. Вижте примера, в който искаме да изчистим низа от ненужни знаци и интервали:
SELECT TRIM( '.,# ' FROM '# ! example .') AS Result;
Резултатът е:
! примера
Функцията SQL TRIM е налична в SQL Server, започвайки с версия 2017, но беше възможно да се изпълни задачата и преди това издание. Потребителите могат да прилагат SQL LTRIM и SQL RTRIM функции. Те присъстват във всички поддържани версии на SQL Server.
Функция LTRIM в SQL Server
SQL LTRIM функцията служи за премахване на ненужни интервали от лявата страна на низа. Синтаксисът е следният:
LTRIM( низ)
низ е задължителният параметър, който определя целевия низ от знаци, който трябва да отрежем от лявата страна. Резултатът е копие на посочения низ, но без интервалите в началото:
SELECT LTRIM(' SQL Function');
Изход:
„SQL функция“
Функция RTRIM в SQL Server
SQL RTRIM функцията работи по същия начин като LTRIM – разликата е, че премахва интервали от дясната страна на низа. Синтаксисът е по-долу:
RTRIM(низ)
низ е задължителният параметър, който сочи към низа от знаци, където трябва да премахнем крайните интервали.
SELECT RTRIM('SQL Server ');
Изход:
„SQL сървър“
Използване на LTRIM и RTRIM заедно
Работейки със SQL Server, често се налага да премахваме интервали само от едната страна на низа. Все пак има случаи, когато трябва да изчистим низа от двете страни. Функцията TRIM, която описахме по-рано, служи на тази цел, но, както си спомняме, тя е достъпна само в SQL Server 2017 и по-нови версии.
Има ли начин да се премахнат както водещите, така и крайните интервали за един низ без функцията TRIM? да. Можем да използваме LTRIM и RTRIM заедно в една заявка.
Синтаксисът е:
LTRIM(RTRIM(низ))
низ дефинира този целеви низ от знаци, който искаме да изчистим от ненужните интервали от двете страни. Забележете също, че можем да поставим LTRIM и RTRIM в произволен ред .
SELECT LTRIM(RTRIM(' SQL Server '));
Изход:
„SQL сървър“
Сега, след като изяснихме същността на всички тези SQL функции (TRIM, LTRIM и RTRIM), нека се потопим по-дълбоко.
Защо белите интервали са важни
Някой може да попита защо може да е важно да се премахнат такива пространства. Казано по-просто, това е, защото те могат да представляват неудобство, когато например се сравняват стойности. Самият празен интервал се счита за част от низ, ако има такъв, така че е по-добре да се грижите за такива проблеми.
Нека да разгледаме правилно тези функции.
Първо, създаваме проста таблица за типовете бази данни, които се изпълняват в нашето предприятие. Нашата таблица има три колони. Първата е колоната с идентификатор, необходима за уникално идентифициране на всеки ред. Вторият е DBTypeNameA . Третият е DBTypeNameB .
Последните две колони се различават по типа данни. DBTypeNameA първо използва VARCHAR тип данни и DBTypeNameB използва CHAR тип данни.
И за двете колони разпределяме дължината на данните от 50.
- Listing 1: Create a Simple Table
USE DB2
GO
CREATE TABLE DBType (
ID INT IDENTITY(1,1)
,DBTypeNameA VARCHAR (50)
,DBTypeNameB CHAR (50))
GO
Забележете разликата между тези типове данни.
- За колоната VARCHAR SQL Server не разпределя пространството за 50 знака, които очакваме в колоната ab initio. Казваме, че колоната трябва да предвижда максимум от 50 знака, но разпределете място според нуждите.
- За колоната CHAR тази разпоредба се прави за 50 знака всеки път, когато се вмъкне ред, без значение дали действителната стойност се нуждае от това пространство или не.
По този начин използването на VARCHAR (променливи символи) е начин за спестяване на място.
След като създадем таблицата, я попълваме с помощта на кода в листинг 2.
-- Listing 2: Populate the Table
USE DB2
GO
INSERT INTO DBType VALUES ('SQL Server','SQL Server');
INSERT INTO DBType VALUES (' SQL Server ',' SQL Server ');
INSERT INTO DBType VALUES (' SQL Server ',' SQL Server ');
INSERT INTO DBType VALUES ('Oracle','Oracle');
INSERT INTO DBType VALUES (' Oracle ',' Oracle ');
INSERT INTO DBType VALUES (' Oracle ',' Oracle ');
INSERT INTO DBType VALUES ('MySQL','MySQL');
INSERT INTO DBType VALUES (' MySQL ',' MySQL ');
INSERT INTO DBType VALUES (' MySQL ',' MySQL ');
Докато попълваме нашата таблица, ние умишлено сме въвели стойности с начални и крайни интервали. Ще ги използваме в нашата демонстрация.
Когато правим заявка към таблицата (вижте листинг 3), можем да видим „изкривяването“ в данните, както е изобразено в SSMS (фигура 1).
-- Listing 3: Query the Table
USE DB2
GO
SELECT * FROM DBType;
Това изкривяване е видимо, защото имаме водещи интервали. Следващите интервали са по-трудни за визуализиране по този начин.
Заявката е, че листинг 4 предоставя по-задълбочен поглед върху това „изкривяване“. Той въвежда функциите LEN и DATALENGTH:
- LEN() връща броя на знаците в низ, с изключение на крайните интервали.
- DATALENGTH() връща броя байтове, използвани за представяне на израз.
-- Listing 4: Query the Table
USE DB2
GO
SELECT DBTypeNameA
, LEN(DBTypeNameA) LenVarcharCol
, DATALENGTH(DBTypeNameA) DataLenVarcharCol
, DBTypeNameB
, LEN(DBTypeNameB) LenCharCol
, DATALENGTH(DBTypeNameB) DataLenCharCol
FROM DBType;
Фигура 2 ни показва вариации в дължината за такива изрази като „SQL Server“, „Oracle“ и „MySQL“ поради началните и крайните интервали.
Това означава, че тези изрази не са еднакви, що се отнася до машината за заявки на SQL Server. Можем да видим това ясно, като изпълним кода в листинг 5.
-- Listing 5: Query for Specific
USE DB2
GO
SELECT * FROM DBType WHERE DBTypeNameA='SQL Server';
SELECT * FROM DBType WHERE DBTypeNameA='Oracle';
SELECT * FROM DBType WHERE DBTypeNameA='MySQL';
DataLenCharCol полето представлява изхода на функцията DATALENGTH() в колоната CHAR. Следователно, едно следствие от това несъответствие между „SQL Server“ и „SQL Server“ е резултатът от заявката, показан на фигура 3.
Виждаме, че въпреки че имаме три реда с всеки тип база данни, нашите заявки връщат само един от всеки, тъй като водещите и крайните интервали разграничават стойностите.
Решаване на проблема
Получаването на правилни резултати за заявката в листинг 5 е осъществимо и лесно. Нуждаем се от функцията TRIM() на SQL Server, както е показано в листинг 6.
-- Listing 6: Query for Specific
USE DB2
GO
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='SQL Server';
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='Oracle';
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='MySQL';
Без тази функция TRIM() бихме могли да получим грешни резултати в някои сценарии.
Можем да продължим по-нататък, като заредим данни в отделна таблица, като приемем, че искаме да разрешим проблема за постоянно (изчистване на данни от сорта).
-- Listing 7: Query for Specific
USE DB2
GO
SELECT ID, TRIM(DBTypeNameA) DBTypeNameA, TRIM(DBTypeNameB) DBTypeNameB FROM DBType;
Сравнете резултатите от Списък 7 (Фигура 5) с тези от Списък 3 (Фигура 1). Можем също да създадем друга таблица с този набор от резултати, за да изчистим данните (вижте листинг 8).
-- Listing 8: Create a New Table (Data Cleanup)
USE DB2
GO
SELECT ID, TRIM(DBTypeNameA) DBTypeNameA, TRIM(DBTypeNameB) DBTypeNameB INTO DBType_New FROM DBType;
SELECT * FROM DBType_New;
По този начин можем да решим проблемите си за постоянно и да премахнем излишните разходи за изпълнение на функции всеки път, когато трябва да извлечем данни от нашата таблица.
Заключение
Функциите TRIM() на SQL Server могат да се използват за премахване както на начални, така и на крайни интервали от низове. LTRIM и RTRIM са два варианта на тази функция, които се фокусират съответно върху водещи (НАЛЯВО) и крайни (ДЯСНИ) интервали.
Можем да приложим TRIM() в движение, за да подредим набора от резултати и да гарантираме получаването на правилния набор от резултати. Освен това можем да го използваме за премахване на интервали, докато преместваме данните от една таблица в друга.
Сродни статии
Как да анализирате низове като професионалист с помощта на функцията SQL SUBSTRING()?