Làm cách nào để cắt một chuỗi trong SQL Server?


132

Trong SQL Server 2017, bạn có thể sử dụng cú pháp này, nhưng không phải trong các phiên bản trước:

SELECT Name = TRIM(Name) FROM dbo.Customer;

Câu trả lời:


239
SELECT LTRIM(RTRIM(Names)) AS Names FROM Customer

3
Đây là cách dễ nhất để làm điều đó, chỉ cần nhớ bí danh cột của bạn được trả về
Miles

1
@Miles - Tôi đã thêm bí danh cho đầy đủ.
Ben Hoffstein

2
Tôi hiểu rằng đây là cách đúng đắn để sử dụng việc cắt xén giá trị. nhưng bạn có thể giải thích tại sao nên sử dụng cả LTRIM và RTRIM khi chúng ta chỉ có thể sử dụng TRIM không?
Mã Buster

6
@CodeBuster: SQL Server không có chức năng TRIM được xác định, ngay cả trong phiên bản 2014.
alextansc

7
SQL Server hiện có TRIM trong phiên bản 2017. docs.microsoft.com/en-us/sql/t-sql/fifts/trim-transact-sql
goodeye

64

Để cắt bên phải, sử dụng:

SELECT RTRIM(Names) FROM Customer

Để cắt bên trái, sử dụng:

SELECT LTRIM(Names) FROM Customer

Để cắt cả hai bên, sử dụng:

SELECT LTRIM(RTRIM(Names)) FROM Customer

5
Ngẫu nhiên, Microsoft có thể có lý do gì để bao gồm chức năng LTRIM và RTRIM mà không có TRIM? Thật kỳ lạ.
Ben Hoffstein

Bởi vì nó là dư thừa. Bạn có thể hoàn thành điều tương tự với LTRIM (RTRIM (var)).
Kibbee

52
Có, nhưng đó là hai chức năng gọi. Bạn có thể nói rằng tất cả chúng đều dư thừa vì TSQL có CHARINDEX và SUBSTRING, nhưng đó là một cách ngu ngốc để xem xét nó.
Ben Hoffstein

9
Nó không dư thừa chút nào. Không cung cấp một chức năng duy nhất gọi là TRIM đặt gánh nặng cú pháp lên người dùng.
tham gia

3
Đây có thể là một sự giám sát, hoặc một trong những tính năng bị trục trặc bởi vì mọi tính năng bắt đầu ở mức -100 điểm (điều này thực sự dẫn đến các bộ tính năng không mạch lạc thay vì các bộ tính năng ưu tiên, IMHO).
siride

7

Tôi cho rằng đây là một bài tập chà dữ liệu một lần. Sau khi hoàn thành, đảm bảo bạn thêm các ràng buộc cơ sở dữ liệu để ngăn chặn dữ liệu xấu trong tương lai, vd

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

Cũng xem xét việc không cho phép các ký tự khác (tab, trả lại vận chuyển, nguồn cấp dữ liệu, v.v.) có thể gây ra sự cố.

Nó cũng có thể là một thời điểm tốt để chia những tên vào family_name, first_name, vv :)


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

0

trong máy chủ sql 2008 r2 với biểu thức ssis chúng ta có chức năng cắt.

Dịch vụ tích hợp máy chủ SQL (SSIS) là một thành phần của phần mềm cơ sở dữ liệu Microsoft SQL Server có thể được sử dụng để thực hiện một loạt các tác vụ di chuyển dữ liệu.

bạn có thể tìm thấy mô tả đầy đủ về liên kết này

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

nhưng chức năng này có một số hạn chế trong chính nó cũng được đề cập bởi msd trên trang đó. nhưng đây là trong máy chủ sql 2008 r2

TRIM("   New York   ") .The return result is "New York".

3
Điều này không liên quan gì đến MS SQL ngoại trừ việc nó nằm trong một sản phẩm đi kèm với cơ sở dữ liệu.
siride

-1

Phiên bản mở rộng của "REPLACE":

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(LTRIM(REPLACE("Put in your Field name", ' ',' '))),'''',''), CHAR(9), ''), CHAR(10), ''), CHAR(13), ''), CHAR(160), '') [CorrValue]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.