Как обрезать строку в SQL Server?

132

В SQL Server 2017 вы можете использовать этот синтаксис, но не в более ранних версиях:

SELECT Name = TRIM(Name) FROM dbo.Customer;
Эрик Лабашоски
источник

Ответы:

239
SELECT LTRIM(RTRIM(Names)) AS Names FROM Customer
Бен Хоффштейн
источник
3
это самый простой способ сделать это, просто не забудьте указать псевдоним для возвращаемой колонки
Майлз
1
@Miles - я добавил псевдоним для полноты картины.
Бен Хоффштейн
2
Я понимаю, что это правильный способ использовать обрезку значения. но можете ли вы объяснить, зачем использовать и LTRIM, и RTRIM, когда вместо этого мы могли бы использовать только TRIM?
Code Buster
6
@CodeBuster: SQL Server не имеет функции TRIM, определенной даже в версии 2014 года.
alextansc
7
SQL Server теперь имеет TRIM в версии 2017. docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql
goodeye
64

Чтобы обрезать справа, используйте:

SELECT RTRIM(Names) FROM Customer

Для обрезки слева используйте:

SELECT LTRIM(Names) FROM Customer

Для обрезки с обеих сторон используйте:

SELECT LTRIM(RTRIM(Names)) FROM Customer
Kibbee
источник
5
Кстати, какая возможная причина могла быть у Microsoft для включения функций LTRIM и RTRIM без TRIM? Это странно.
Бен Хоффштейн,
Потому что это избыточно. Вы можете сделать то же самое с LTRIM (RTRIM (var)).
Kibbee,
52
Да, но это два вызова функций. Вы можете сказать, что все они избыточны, поскольку в TSQL есть CHARINDEX и SUBSTRING, но это идиотский взгляд на это.
Бен Хоффштейн
9
Это совсем не лишнее. Отсутствие единственной функции под названием TRIM ложится синтаксической нагрузкой на пользователя.
Joelc
3
Вероятно, это был недосмотр или одна из тех функций, которые были упразднены, потому что каждая функция начинается с -100 баллов (что на самом деле просто приводит к несогласованным наборам функций вместо приоритетных наборов функций, ИМХО).
siride
7

Я предполагаю, что это разовое упражнение по очистке данных. После этого убедитесь, что вы добавили ограничения базы данных, чтобы предотвратить появление неверных данных в будущем, например

ALTER TABLE Customer ADD
   CONSTRAINT customer_names__whitespace
      CHECK (
             Names NOT LIKE ' %'
             AND Names NOT LIKE '% '
             AND Names NOT LIKE '%  %'
            );

Также рассмотрите возможность запрета других символов (табуляции, возврата каретки, перевода строки и т. Д.), Которые могут вызвать проблемы.

Он также может быть хорошее время , чтобы разделить эти имена в family_name, first_nameи т.д. :)

onedaywhen
источник
4
SELECT LTRIM(RTRIM(Replace(Replace(Replace(name,'   ',' '),CHAR(13), ' '),char(10), ' ')))
from author
Razon
источник
0

в sql server 2008 r2 с выражением ssis у нас есть функция обрезки.

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

вы можете найти полное описание по этой ссылке

http://msdn.microsoft.com/en-us/library/ms139947.aspx

но эта функция сама по себе имеет некоторые ограничения, которые также упоминаются msdn на этой странице. но это в sql server 2008 r2

TRIM("   New York   ") .The return result is "New York".
rahularyansharma
источник
3
Это не имеет ничего общего с MS SQL, за исключением того, что это продукт, поставляемый вместе с базой данных.
siride
-1

Расширенная версия «REPLACE»:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(LTRIM(REPLACE("Put in your Field name", ' ',' '))),'''',''), CHAR(9), ''), CHAR(10), ''), CHAR(13), ''), CHAR(160), '') [CorrValue]
Кай-Уве Бёниш
источник