복붙노트

[SQL] SQL 서버 교체, 특정 문자 후 모두 제거

SQL

SQL 서버 교체, 특정 문자 후 모두 제거

내 데이터 외모처럼

ID    MyText
1     some text; some more text
2     text again; even more text

내가 다음 왼쪽 해요 그래서 나는 세미콜론을 포함하여 내 세미콜론 후 모든 드롭 텍스트 및 업데이트 할 수 있습니다 방법 :

ID    MyText
1     some text
2     text again

나는 대체 SQL 서버에보고했지만, 검사의 실행 가능한 방법을 생각할 수 없다 ";"

해결법

  1. ==============================

    1.사용 LEFT는 CHARINDEX와 결합 :

    사용 LEFT는 CHARINDEX와 결합 :

    UPDATE MyTable
    SET MyText = LEFT(MyText, CHARINDEX(';', MyText) - 1)
    WHERE CHARINDEX(';', MyText) > 0
    

    참고이 절은 세미콜론이없는 한 업데이트 행을 건너 뜁니다 곳.

    여기에 작품 위의 SQL을 확인하기 위해 몇 가지 코드는 다음과 같습니다

    declare @MyTable table ([id] int primary key clustered, MyText varchar(100))
    insert into @MyTable ([id], MyText)
    select 1, 'some text; some more text'
    union all select 2, 'text again; even more text'
    union all select 3, 'text without a semicolon'
    union all select 4, null -- test NULLs
    union all select 5, '' -- test empty string
    union all select 6, 'test 3 semicolons; second part; third part;'
    union all select 7, ';' -- test semicolon by itself    
    
    UPDATE @MyTable
    SET MyText = LEFT(MyText, CHARINDEX(';', MyText) - 1)
    WHERE CHARINDEX(';', MyText) > 0
    
    select * from @MyTable
    

    나는 다음과 같은 결과를 얻을 :

    id MyText
    -- -------------------------
    1  some text
    2  text again
    3  text without a semicolon
    4  NULL
    5        (empty string)
    6  test 3 semicolons
    7        (empty string)
    
  2. ==============================

    2.시대의 일부 필드는이 때 ";" 일부는 당신은 또한 필드에 세미콜론을 추가하고 설명 된 것과 동일한 방법을 사용할 수 없습니다.

    시대의 일부 필드는이 때 ";" 일부는 당신은 또한 필드에 세미콜론을 추가하고 설명 된 것과 동일한 방법을 사용할 수 없습니다.

    SET MyText = LEFT(MyText+';', CHARINDEX(';',MyText+';')-1)
    
  3. ==============================

    3.아무 가진 사람을 떠날 때 CASE를 사용할 수 없습니다 ';' 혼자.

    아무 가진 사람을 떠날 때 CASE를 사용할 수 없습니다 ';' 혼자.

        SELECT
        CASE WHEN CHARINDEX(';', MyText) > 0 THEN
        LEFT(MyText, CHARINDEX(';', MyText)-1) ELSE
        MyText END
        FROM MyTable
    
  4. ==============================

    4.";"사용 CHARINDEX는를 찾을 수 있습니다. ";"바로 전에 일부를 환부에 다음 문자열을 사용합니다.

    ";"사용 CHARINDEX는를 찾을 수 있습니다. ";"바로 전에 일부를 환부에 다음 문자열을 사용합니다.

  5. ==============================

    5.

    UPDATE MyTable
       SET MyText = SUBSTRING(MyText, 1, CHARINDEX(';', MyText) - 1)
     WHERE CHARINDEX(';', MyText) > 0 
    
  6. ==============================

    6.상황에 내가 정규식을 사용하여 선호하는 문자열에 대한 뭔가를 교체하거나 일치 (찾기)해야 할 때.

    상황에 내가 정규식을 사용하여 선호하는 문자열에 대한 뭔가를 교체하거나 일치 (찾기)해야 할 때.

    정규 표현식이 완전히 T-SQL에서 지원되지 않습니다, 때문에 당신은 CLR 기능을 사용하여 구현할 수 있습니다. 또한, 당신은 당신이 필요로 전혀 C # 또는 CLR 지식을 필요로하지 않는 것은 MSDN 문자열 유틸리티 함수 예제에서 이미 사용할 수 있습니다.

    귀하의 경우, 정규 표현식을 사용하여 솔루션입니다 :

    SELECT [dbo].[RegexReplace] ([MyColumn], '(;.*)', '')
    FROM [dbo].[MyTable]
    

    그러나 데이터베이스에 이러한 기능을 구현하는 모든 더 복잡한 문제를 해결하는 데 도움 것입니다.

    단지 [DBO]. [REGEXREPLACE] 기능을 배포 할 수 있지만 전체 문자열 유틸리티 클래스를 배포하는 당신에게 추천하는 방법을 보여주는 아래의 예.

  7. from https://stackoverflow.com/questions/1668014/sql-server-replace-remove-all-after-certain-character by cc-by-sa and MIT license