SQL Server를 사용하여 문자열을 자르는 방법


105

SQL Server에 큰 문자열이 있습니다. 해당 문자열을 10 또는 15 자로 자르고 싶습니다.

원래 문자열

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

원하는 문자열

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

1
"원하는 문자열"에는 "원래 문자열"에서 28자가 포함되어 있으며 요청하는 "10 또는 15"에 가깝지 않습니다
KM.

답변:


158

긴 문자열의 몇 자만 반환하려면 다음을 사용할 수 있습니다.

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

데모가있는 SQL Fiddle을 참조하십시오 .

이렇게하면 문자열의 처음 15자를 반환 한 다음 ...을 끝에 연결 합니다.

15보다 작은 문자열을 얻지 않으려면 ...다음을 사용할 수 있습니다.

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

데모로 SQL Fiddle 보기


2
원래 문자열이 미만 15 자하는 경우, 당신은 여전히 얻을 ...이 적용되지 않는 경우 추가
KM합니다.

@KM. 문자열 길이를 확인하는 버전 추가
Taryn

2
col의 길이가 정확히 15이면 left (col, 15)를 수행 할 때 전체 문자열을 얻은 다음 끝에 '...'를 넣습니다. 확실히 더 나은 해결책은 'when len (col)> 15'를 확인하는 것입니다.
Murphybro2

35

당신이 사용할 수있는

LEFT(column, length)

또는

SUBSTRING(column, start index, length)

83
이 SO 질문은 이제 tsql에서 문자열을 자르는 방법에 대한 답을 찾는 가장 쉬운 방법입니다. 이 사람이 그것을 요구하지 않았다면, 나는 약간의 MSDN 문서를 통해 트롤 어업을하고 ... 지금 내 생명을 미워하는 것
DMAC 파괴자

4
@snaplemouton 간단한 것에 대해 질문하는 것은 "나쁜"일 수도 있지만 (답변에서 찾기 쉬 웠던 것처럼) 어쨌든 결과는 좋습니다. 내 말은 SO는 모든 종류의 질문에 대한 답변을 담고 있다는 의미입니다 (그렇지 않으면 쉽게 찾을 수있는 것에 대해 묻는 질문도 포함).
jahu

8
@snaplemouton; 이 질문 / 답변을 검색 할 때 많은 시간을 절약 할 수있는 결과가 무엇인지 추측하십시오.
AMissico

9
또한 MSDN은 TRUNCATE
pablete

4
@snaplemouton, Google에서이 답변을 찾았습니다. 미래의 Google 직원이 보게 될 것이므로 StackOverflow에서 사람들에게 Google 정보를 알려주지 마세요. 이 사이트는 Google 결과에 표시되기 위해 대부분 존재합니다.
Slothario

4

여기에 대한 답변은 훌륭하다고 생각하지만 시나리오를 추가하고 싶습니다.

여러 번 문자열 길이에 대한 걱정없이 문자열 앞쪽에서 일정량의 문자를 제거하고 싶었습니다. RIGHT () 및 SUBSTRING ()을 사용하여이 작업을 수행하는 방법에는 여러 가지가 있지만 모두 문자열의 길이를 알 필요가있어 때때로 속도가 느려질 수 있습니다.

대신 STUFF () 함수를 사용했습니다.

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

이것은 불필요한 문자열의 길이를 빈 문자열로 대체합니다.


4

Cast () 연산을 사용할 수도 있습니다.

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

출력 텍스트 파일의 해당 열에 새로운 수의 문자 만 할당되기 때문에 텍스트 파일로 출력 할 때이 기능이 가장 좋습니다. 보다 간결한 결과를 얻으려면 (예 : 1000 대신 50).
BillDarcy 2015

1

아래를 사용할 수도 있습니다. iif는 case 문을 피하고 필요할 때만 줄임표를 추가합니다 (SQL Server 2012 이상에서만 좋음). case 문은 ANSI를 더 준수합니다 (하지만 더 자세한 정보).

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.