2013-02-28 42 views
68

tôi có chuỗi lớn trong SQL Server. Tôi muốn cắt ngắn chuỗi đến 10 hoặc 15 nhân vậtCách cắt ngắn chuỗi bằng máy chủ SQL

gốc chuỗi

this is test string. this is test string. this is test string. this is test string. 

mong muốn chuỗi

this is test string. this is ...... 
+0

bạn "chuỗi mong muốn" chứa 28 ký tự từ "chuỗi gốc", không phải gần với "10 hoặc 15" bạn đang yêu cầu –

Trả lời

103

Nếu bạn chỉ muốn quay trở lại một vài ký tự của chuỗi dài của bạn, bạn có thể sử dụng :

select 
    left(col, 15) + '...' col 
from yourtable 

Xem SQL Fiddle with Demo.

Điều này sẽ trả lại 15 ký tự đầu tiên của chuỗi và sau đó ghép nối các ... cho đến cuối của nó.

Nếu bạn muốn chắc chắn hơn so với dây ít hơn 15 không nhận được ... sau đó bạn có thể sử dụng:

select 
    case 
    when len(col)>=15 
    then left(col, 15) + '...' 
    else col end col 
from yourtable 

Xem SQL Fiddle with Demo

+1

nếu chuỗi ban đầu ít hơn 15 ký tự, bạn vẫn nhận được '...' nối thêm khi nó không áp dụng –

+0

@KM. thêm một phiên bản sẽ kiểm tra độ dài chuỗi – Taryn

+0

+1, bây giờ có vẻ tốt ;-) –

12

Bạn có thể sử dụng LEFT (cột, chiều dài) hoặc SUBSTRING (cột, chỉ mục bắt đầu, thời lượng)

Đảm bảo bạn tìm kiếm một chút trước khi đặt câu hỏi. Câu trả lời là khá dễ tìm.

+72

Câu hỏi SO này bây giờ là cách dễ nhất để tìm câu trả lời cho cách cắt ngắn chuỗi trong tsql. Nếu người này không hỏi, thì tôi sẽ được rà soát thông qua một số bài viết MSDN và ghét cuộc sống của tôi ngay bây giờ ... –

+1

Tôi xin lỗi nếu câu trả lời của tôi nghe có vẻ thô lỗ, nó không có nghĩa là thô lỗ.Nhưng nó vẫn đúng là câu hỏi này không nên được hỏi ngay từ đầu vì nó rất dễ tìm ra câu trả lời. MSDN là một cách tuyệt vời để tìm câu trả lời và nó là dễ dàng hơn để tìm câu trả lời cho biết trên đó. Bạn không phải đi trên 500 trang để tìm cách cắt ngắn chuỗi trong SQL. Bạn nhận được tất cả các chức năng chuỗi ở đây http://msdn.microsoft.com/en-us/library/ms181984.aspx – snaplemouton

+3

@snaplemouton Nó có thể là "xấu" đặt câu hỏi về những thứ đơn giản (như trong câu trả lời là dễ tìm trước) , nhưng kết quả là tốt anyway. Tôi có nghĩa là SO có nghĩa là để giữ câu trả lời cho tất cả các loại câu hỏi (ngay cả những người hỏi về cách khác dễ dàng để tìm công cụ). – jahu

4

Tôi nghĩ câu trả lời ở đây rất tuyệt, nhưng tôi muốn thêm một kịch bản.

Một vài lần tôi muốn lấy một số lượng ký tự nhất định ở phía trước một chuỗi, mà không phải lo lắng về độ dài của chuỗi đó. Có một số cách để làm điều này với RIGHT() và SUBSTRING(), nhưng tất cả chúng cần phải biết chiều dài của chuỗi mà đôi khi có thể làm chậm những thứ xuống.

Tôi đã sử dụng STUFF() chức năng thay vì:

SET @Result = STUFF(@Result, 1, @LengthToRemove, '') 

này thay thế chiều dài của chuỗi không cần thiết với một chuỗi rỗng.

3

Bạn cũng có thể sử dụng Cast() hoạt động:

Declare @name varchar(100); 
set @name='....'; 
Select Cast(@name as varchar(10)) as new_name 
+0

Tôi thích cái này tốt nhất khi xuất ra một tệp văn bản vì chỉ có số ký tự mới được cấp phát cho cột đó trong tệp văn bản đầu ra. (ví dụ: 50 thay vì 1000) để có kết quả nhỏ gọn hơn. – BillDarcy

1

Bạn cũng có thể sử dụng dưới đây, iif tránh báo cáo trường hợp và chỉ cho biết thêm elip khi có yêu cầu (chỉ tốt trong SQL Server 2012 và sau) và báo cáo trường hợp là hơn ANSI compliant (nhưng tiết hơn)

SELECT 
    col, LEN(col), 
    col2, LEN(col2), 
    col3, LEN(col3) FROM (
    SELECT 
    col, 
    LEFT(x.col, 15) + (IIF(len(x.col) > 15, '...', '')) AS col2, 
    LEFT(x.col, 15) + (CASE WHEN len(x.col) > 15 THEN '...' ELSE '' END) AS col3 
    from (
     select 'this is a long string. One that is longer than 15 characters' as col 
     UNION 
     SELECT 'short string' AS col 
     UNION 
     SELECT 'string==15 char' AS col 
     UNION 
     SELECT NULL AS col 
     UNION 
     SELECT '' AS col 
) x 
) y 
0
 CASE 
    WHEN col IS NULL 
     THEN '' 
    ELSE SUBSTRING(col,1,15)+ '...' 
    END AS Col 
Các vấn đề liên quan