Cara memotong string menggunakan SQL server

105

saya memiliki string besar di SQL Server. Saya ingin memotong string itu menjadi 10 atau 15 karakter

String asli

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

String yang diinginkan

this is test string. this is ......
SanamShaikh
sumber
1
"string yang diinginkan" Anda berisi 28 karakter dari "string asli", tidak mendekati "10 atau 15" yang Anda minta
KM.

Jawaban:

158

Jika Anda hanya ingin mengembalikan beberapa karakter dari string panjang Anda, Anda dapat menggunakan:

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

Lihat SQL Fiddle dengan Demo .

Ini akan mengembalikan 15 karakter pertama dari string dan kemudian menggabungkannya ...ke ujungnya.

Jika Anda ingin memastikan bahwa string kurang dari 15 tidak mendapatkan ...maka Anda dapat menggunakan:

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

Lihat SQL Fiddle dengan Demo

Taryn
sumber
2
jika string asli kurang dari 15 karakter, Anda masih mendapatkan yang ...ditambahkan jika tidak berlaku
KM.
@Bayu_joo menambahkan versi yang akan memeriksa panjang string
Taryn
2
Jika col tepat 15 panjangnya, itu akan mendapatkan seluruh string saat melakukan left (col, 15) dan kemudian meletakkan '...' di ujungnya. Tentunya solusi yang lebih baik adalah memeriksa 'ketika len (col)> 15'.
Murphybro2
35

Kamu bisa memakai

LEFT(column, length)

atau

SUBSTRING(column, start index, length)
snaplemouton.dll
sumber
83
Pertanyaan SO ini sekarang adalah cara termudah untuk menemukan jawaban bagaimana memotong string di tsql. Jika orang ini tidak menanyakannya, maka saya akan menelusuri beberapa artikel MSDN dan membenci hidup saya saat ini ...
DMac the Destroyer
4
@snaplemouton Mungkin "buruk" mengajukan pertanyaan tentang hal-hal sederhana (seperti dalam jawaban yang mudah ditemukan sebelumnya), tetapi hasilnya tetap bagus. Maksud saya SO dimaksudkan untuk menyimpan jawaban atas semua jenis pertanyaan (bahkan yang menanyakan tentang hal yang mudah ditemukan).
jahu
8
@tokopedia Coba tebak, ketika mencari pertanyaan / jawaban ini berada di bagian atas hasil yang menghemat banyak waktu saya.
AMissico
9
Plus, MSDN tidak
menyusun
4
@snaplemouton, saya menemukan jawaban ini di Google. Harap berhenti memberi tahu orang-orang tentang hal-hal Google di StackOverflow, karena karyawan Google di masa mendatang akan melihatnya. Situs ini ada sebagian besar untuk ditampilkan di hasil Google.
Slothario
4

Saya pikir jawabannya di sini bagus, tetapi saya ingin menambahkan skenario.

Beberapa kali saya ingin mengambil sejumlah karakter dari depan string, tanpa mengkhawatirkan panjangnya. Ada beberapa cara untuk melakukan ini dengan RIGHT () dan SUBSTRING (), tetapi semuanya perlu mengetahui panjang string yang terkadang dapat memperlambat segalanya.

Saya telah menggunakan fungsi STUFF () sebagai gantinya:

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

Ini menggantikan panjang string yang tidak dibutuhkan dengan string kosong.

Chloe
sumber
4

Anda juga dapat menggunakan operasi Cast ():

 Declare @name varchar(100);
set @name='....';
Select Cast(@name as varchar(10)) as new_name
goli55
sumber
Saya paling suka yang ini saat menampilkan file teks karena hanya jumlah karakter baru yang dialokasikan ke kolom itu di file teks output. (mis. 50 bukannya 1000) untuk hasil yang lebih ringkas.
BillDarcy
1

Anda juga dapat menggunakan di bawah ini, iif menghindari pernyataan kasus dan hanya menambahkan elipsis saat diperlukan (hanya baik di SQL Server 2012 dan yang lebih baru) dan pernyataan kasus lebih sesuai dengan ANSI (tetapi lebih bertele-tele)

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
Gregory Blajian
sumber
0
     CASE
     WHEN col IS NULL
        THEN ''
     ELSE SUBSTRING(col,1,15)+ '...' 
     END AS Col
Ke atasD
sumber