2013-07-29 4 views
2

두 개의 데이터 열 모두를 TYPE TEXT로 가져 오는 SQL 쿼리가 있습니다.SQL 하위 문자열 - 마지막 문자 제거

내가 뭘하려고 수 있습니다 :

UPDATE [DBNAME} 
SET [3 15] = SUBSTR([3 15], -1)) 
where [3 15] LIKE '%;' 
[3 (15)] 열 이름이

, 난의 끝을 가지고 그 열에서 데이터를 가져 싶은 ';' 후행 ';'을 제거하십시오.

열 유형이 문자열이지만 그렇지 않은 경우 이것은 쉽습니다. A의 실행

: 마이크로 소프트 SQL 서버 2005 - 개발자 버전

+0

어떤 타입? – mirkobrankovic

+0

텍스트 형식의 열입니다. – LmC

+0

이 데이터베이스와 버전은 무엇입니까? –

답변

2

를 읽는 당신에게

SELECT LEFT('CHAMLY', LENGTH('CHAMLY') -1); 

도움이 될 것입니다 (최대).

declare @a table([3 15] text) 
insert @a values('aba;;;') 
insert @a values('123abc;;') 
insert @a values('abdc;') 
insert @a values('abkjfshc') 
insert @a values(';;;;') 

;with a as 
(
SELECT [3 15], cast([3 15] as varchar(max)) v 
-- replace @a with your actual tablename 
FROM @a 
) 
UPDATE a 
SET [3 15] = left(v, len(v)-patindex('%;[^;]%', reverse(v) + '+') + 1) 
WHERE [3 15] LIKE '%;;' -- notice the change 

select * from @a 

결과 :

3 15 
aba; 
123abc; 
abdc; 
abkjfshc 
; 

편집 :

텍스트 내에서 '%; %'의 모든 조합을 교체하려면 :

declare @a table([3 15] text) 
insert @a values('aba;;;') 
insert @a values('123abc;;') 
insert @a values('abdc;') 
insert @a values('ab;;kjf;;;;;shc') 
insert @a values(';;;;') 

-- if any combinations of ';;' still exists repeat until they are gone 
while exists (select 1 from @a where [3 15] like '%;;%') 
with a as 
(
SELECT [3 15], cast([3 15] as varchar(max)) v 
-- replace @a with your actual tablename 
FROM @a 
WHERE [3 15] LIKE '%;;%' -- notice the change 
) 
UPDATE a 
-- to speed things up i used several replace 
SET [3 15] = replace(replace(replace(replace(v, ';;;;', ';'), ';;;', ';'), ';;;', ';'), ';;', ';') 
그러나 여기서 일해야 솔루션입니다
+0

위대한 대답 하나 빠른 quesiton 같은 id가 뭔가 간단있을 수도 있습니다 ;; 문자열 내에서 어떻게 제거하고 하나만 바꾸면됩니까? – LmC

+0

큰 감사, 나는 이것을 반영하기 위해 질문을 편집했다. 그러나 편집 didnt는 간다. – LmC

+0

안녕하세요 큰 대답 그러나 한 번 나는 다시 나의 falut by ;;; i ment 예 liam ;; david 그래서 liam처럼 보일 대체하고 싶습니다; david – LmC

4

희망이 SQL 내가 VARCHAR하는 텍스트 필드를 변경 것이 더 사용 http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

+0

"CHAMLY"무엇을 나타낼 것입니까? – LmC

+0

메시지 195, 수준 15, 상태 10, 줄 1 'LENGTH'는 (는) 인식 할 수없는 기본 제공 함수 이름입니다. – LmC

+0

'CHAMLY'의 colomn 이름을 바꿔야합니다. 이 SQL을 사용하여 MySQL에서 작동하는 방법을 보여줍니다. 당신은 귀하의 요구 사항에 따라 수정해야합니다. 나는 문제가 오히려 올바른 SQL보다는 끝날 수있는 방법을 설명하려했습니다. 길이에 LEN을 사용하십시오. 이것을 사용하십시오 UPDATE [DBNAME} SET [3 15] = LEFT ([3,15], LEN ([3 15]) -1); 여기서 [3 15] LIKE '%;' –

3

시험해보기 :

UPDATE table 
SET someColumn = SUBSTRING(someColumn, 1, DATALENGTH(someColumn) - 1) 
WHERE someColumn like '%;' 

예를 들어, UPDATE dbname이라고 말하고 있습니다. 데이터베이스의 이름 인 경우 그 이름이 올바르지 않기 때문에 어떤 이유로 테이블의 이름이라고 가정합니다.

+0

대체 어떻게해야합니까? REPLACE (캐스팅 [3 15] VARCHAR (MAX)), ';;', ';') – LmC

+0

당신의 구문이 조금 벗어났다 : REPLACE (CAST ([3 15] VARCHAR (MAX)), ';;', ';') – JoeFryer

0

그것이 단순한 하나

UPDATE Table SET column = LEFT(column,-1) 
+0

이 작동하지 않습니다. – sobolevn