Câu hỏi Làm thế nào để cắt ngắn chuỗi bằng cách sử dụng máy chủ SQL


tôi có chuỗi lớn trong SQL Server. Tôi muốn cắt ngắn chuỗi đó thành 10 hoặc 15 ký tự

Chuỗi gốc

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

Chuỗi mong muốn

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

76
2018-02-28 17:56


gốc


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


Các câu trả lời:


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

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

Xem SQL Fiddle với bản trình diễn.

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

Nếu bạn muốn chắc chắn hơn các chuỗi nhỏ hơn 15 thì không nhận được ... thì 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 với bản trình diễn


117
2018-02-28 17:58



nếu chuỗi gốc ít hơn 15 ký tự, bạn vẫn nhận được ... được thêm vào khi nó không áp dụng - KM.
@KM. đã thêm một phiên bản sẽ kiểm tra độ dài chuỗi - Taryn♦
1, bây giờ nó có vẻ tốt ;-) - KM.


Bạn có thể dùng

LEFT(column, length)

hoặc là

SUBSTRING(column, start index, length)

15
2018-02-28 18:24



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ẽ 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ờ ... - DMac the Destroyer
@snaplemouton Nó có thể là "xấu" đặt câu hỏi về những điều đơn giản (như trong câu trả lời là dễ dàng để tìm thấy trước đây), 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
@snaplemouton; Đoán xem điều gì, khi tìm kiếm câu hỏi / câu trả lời này nằm ở đầu các kết quả giúp tôi tiết kiệm rất nhiều thời gian. - AMissico
Ngoài ra, MSDN không cụm từ mô tả của một trong hai chức năng bằng cách sử dụng từ TRUNCATE - pablete
@snaplemouton, tôi đã tìm thấy câu trả lời này trên Google. Vui lòng ngừng nói với mọi người về những thứ của Google trên StackOverflow, vì những người dùng Google trong tương lai sẽ nhìn thấy nó. Trang web này tồn tại một phần lớn để hiển thị trong kết quả của Google. - Slothario


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 của một chuỗi, mà không cần lo lắng về độ dài của nó. 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 hàm STUFF () thay vào đó:

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

Điều này thay thế độ dài của chuỗi không cần thiết bằng một chuỗi rỗng.


4
2018-02-24 23:38





Bạn cũng có thể sử dụng thao tác Cast ():

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

3
2018-03-25 09:14



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


Bạn cũng có thể sử dụng bên dưới, iif tránh tuyên bố trường hợp và chỉ thêm dấu ba chấm khi được yêu cầu (chỉ tốt trong SQL Server 2012 trở lên) và tuyên bố trường hợp ANSI tuân thủ (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

1
2018-05-31 21:11





     CASE
     WHEN col IS NULL
        THEN ''
     ELSE SUBSTRING(col,1,15)+ '...' 
     END AS Col

0
2017-07-03 13:19