developer tip

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

copycodes 2020. 8. 25. 08:18
반응형

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


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 ......

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

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 보기


당신이 사용할 수있는

LEFT(column, length)

또는

SUBSTRING(column, start index, length)

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

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

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

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

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


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

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

아래를 사용할 수도 있습니다. 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

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

참고 URL : https://stackoverflow.com/questions/15142356/how-to-truncate-string-using-sql-server

반응형