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


Ответы:


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

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и т.д. :)


4
SELECT LTRIM(RTRIM(Replace(Replace(Replace(name,'   ',' '),CHAR(13), ' '),char(10), ' ')))
from author

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".

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]
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.