표에서 특정 열의 첫 문자를 어떻게 제거합니까?


162

SQL에서 테이블의 특정 열 값의 처음 4자를 제거하려면 어떻게해야합니까? 열 이름은 Student Code이며 예제 값은 ABCD123Stu1231입니다. 모든 레코드에 대해 테이블에서 처음 4자를 제거하고 싶습니다.

저를 안내 해주세요

답변:


259
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn

편집 : 설명하기 위해 RIGHT는 작동 할 문자열 (또는 열)과 반환 할 문자 수 (문자열의 "오른쪽"에서 시작)의 두 가지 인수를 취합니다. LEN은 열 데이터의 길이를 반환하고 RIGHT 함수는 가장 왼쪽에있는 4자를 "뒤에"남기도록 4를 뺍니다.

이것이 의미가 있기를 바랍니다.

다시 편집-나는 Andrew의 응답을 읽었으며 그는 제대로 이해했을 수 있습니다. 이 경우 (의사 결과를 반환하지 않고 테이블을 업데이트하려는 경우) 다음을 수행 할 수 있습니다.

UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)

그는 올바른 길을 가고 있지만 그의 해결책은 4 글자를 버리지 않고 문자열의 시작 부분에 4 글자를 유지 합니다.


9
<4 자 미만의 값은 실패합니다. <4의 열 값을 반환하려면 사례 블록을 추가해야합니다.
Scott Ivey

2
아마도 그것을 처리하는 가장 좋은 방법은 다음과 같습니다. 4 자 미만으로 즉, OP는 특정 열의 처음 4자를 자르기를 원한다고 표시했습니다. 모든 행을 자르는 것이 더 자세하게 제공되지 않으면 가정합니다.
Aaron Alton

1
@ spencer7593-하하하 ... 참. WHERE NOT ISNUMERIC (LEFT (MyColumn, 1)) : 당신은 항상 안전을 위해 WHERE 절을 추가 할 수 있습니다
아론 알톤

NULL 열에서 이것을 호출하는 것이 안전합니까? 이 경우에 일어날까요?
Ian R. O'Brien

필자의 경우 열 내 실제 내용의 크기에 관계없이 첫 번째 n 문자를 제외하고 싶었 기 때문에 COL_LENGTH('MyTable', 'MyColumn')대신에 사용 했지만 결국은 LEN(MyColumn)그렇지 않았습니다!
sfarbota

86
Stuff(someColumn, 1, 4, '')

첫 번째 1문자 위치 부터 시작하여 4문자를 아무것도 아닌 것으로 바꿉니다.''


7
내가 알고있는 오래된 질문이지만이 솔루션은 1 개 이상의 함수를 사용하지 않거나 임의의 큰 숫자가 있으므로이 솔루션을 선호합니다.
Edwin Stoteler 13:27에

4
더 : someColumnCTE의 하위 선택이나 소싱과 같은 복잡한 것이면 두 번 평가할 필요가 없습니다.
Jeff

1
참고 로이 솔루션은 숫자 값을 자르는 데에도 효과적입니다.
Steven Ball

1
당신이 말한 것을 보강하기 위해, 여기 완성 된 결과가 있습니다. 먼저 선택하고 원하는 행을 가져와야하는지 확인한 다음이 업데이트에서 바로 가져옵니다. 참고 /주의-성공적으로 실행 된 후 다시 실행하지 마십시오. 처음 4 개의 문자를 무차별 적으로 차단합니다. 업데이트 테이블 세트 textField = (SELECT STUFF (CONVERT (VARCHAR (MAX), textField), 1, 4, '')) 여기서 activitytype = 'A'이고 승인 된 날짜> '2017-06-30'및 textField가 '% The County1 %'와 같지 않고 textField가 '% The County2 %'와 같지 않고 초록이 '% The County3 %'와 같지 않음) (12345, ... id의 범위 ...
56789

33

왜 LEN을 사용하여 2 개의 문자열 함수가 있습니까? 캐릭터 5 만 있으면됩니다 ...

...SUBSTRING (Code1, 5, 8000)...

1
이것이 미래의 증거입니까? 향후 버전의 MSSQL이 8,000보다 큰 최대 varchar 크기를 사용할 수 있습니까?
개발자 웹

3
varchar (max)는 이미 8000 자보다 큽니다. len (열)을 넣으면 영원히 작동합니다
Gaspa79

2
아니면 그냥 2000000000을 사용하십시오. 왜 LEN 함수를 추가하십시오. 값을 추가하지 않고 후행 공백도 무시합니다 (원하는 경우)
gbn

1
고마워, 이것은 일회성으로 나를 위해 잘 작동했습니다. 어떤 이유로 든 추가 문자를 자르는 것이 어떤 이유로 받아 들여졌지만 이것은 완벽하게 작동합니다.
user2366842

2
@ user2366842 허용되는 답변을 사용하여 추가 문자를 자른 이유는 아마도 텍스트에 후행 공백이 있었기 때문일 것입니다. RTRIM & LTRIM을 사용하여 원하는 경우이를 보완 할 수 있습니다.
Spazmoose

13

이 시도:

update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);

7

다음은 수행하려는 작업의 간단한 모형입니다. :)

CREATE TABLE Codes
(
code1 varchar(10),
code2 varchar(10)
)

INSERT INTO Codes (CODE1, CODE2) vALUES ('ABCD1234','')


UPDATE Codes
SET code2 = SUBSTRING(Code1, 5, LEN(CODE1) -4)

따라서 트리밍하려는 필드에 대해 마지막 명령문을 사용하십시오. :)

SUBSTRING 함수는 FIFTH 문자에서 시작하여 CODE1의 길이가 4 미만 (시작에서 건너 뛴 문자 수) 미만인 Code1을 잘라냅니다.


5

완전한 것

DECLARE @v varchar(10)

SET @v='#temp'

select STUFF(@v, 1, 1, '')
WHERE LEFT(@v,1)='#'

3

SQL에서이 작업을 수행 할 수도 있습니다.

substring(StudentCode,4,len(StudentCode))

통사론

substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)

3

이 시도. 100 % 일

UPDATE Table_Name
SET RIGHT(column_name, LEN(column_name) - 1)

  


3

값의 길이가 4보다 작을 경우 상단 답변이 적합하지 않습니다.

T-SQL에서

음수를 허용하지 않기 때문에 "올바른 길이 매개 변수가 올바른 함수에 전달되었습니다"가 표시됩니다. CASE 문을 사용하십시오.

SELECT case when len(foo) >= 4 then RIGHT(foo, LEN(foo) - 4) else '' end AS myfoo from mytable;

Postgres에서

음수 값을 RIGHT에 전달하면 전체 문자열 대신 첫 번째 문자가 잘 리기 때문에 4보다 작은 값은 오류 대신 놀라운 동작을 제공합니다. RIGHT(MyColumn, -5)대신 사용 하는 것이 더 합리적 입니다.

"-5"대신 최상위 답변의 "길이-5"를 사용할 때 얻는 결과를 비교하는 예 :

create temp table foo (foo) as values ('123456789'),('12345678'),('1234567'),('123456'),('12345'),('1234'),('123'),('12'),('1'), ('');

select foo, right(foo, length(foo) - 5), right(foo, -5) from foo;

foo       len(foo) - 5  just -5   
--------- ------------  -------     
123456789 6789          6789 
12345678  678           678  
1234567   67            67   
123456    6             6    
12345                       
1234      234               
123       3                 
12                          
1                           

1
어떤 데이터베이스를 사용하십니까? 질문에 tsql 태그가 있지만 T-SQL에서는 음수 매개 변수를 허용하지 않습니다. "잘못된 함수에 잘못된 길이의 매개 변수가 전달되었습니다."라는 오류 메시지가 나타납니다.
팔로 타

태그를 눈치 채지 못했습니다. 답변을 T-SQL 및 Postgres 섹션으로 나눕니다. 감사합니다.
누 메논


2

DB2 사용의 경우 공유하는 것이 좋습니다. INSERT(someColumn, 1, 4, '')

Stuff DB2에서 지원되지 않습니다


1

다음과 같은 특수 문자가 앞에 오는 처음 몇 문자를 제거해야하는 #경우이 방법이 좋습니다.

UPDATE tblInvalidID
SET [ColumnName] =stuff(ColumnName, 1, charindex('#', ColumnName), ' ') 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.