2013-05-02 3 views
0

16 자리 숫자의 두 번째 숫자를 '1'로 업데이트하는 방법은 무엇입니까?열의 두 번째 숫자 업데이트

이것은 쉬운 것이어야하지만 나는 운이 없었습니다.

SQL Server 2000 및 2005 (여러 환경 - 동일한 데이터베이스 테이블)로 작업하고 있습니다.

내가 온라인 솔루션을 검색 분명히 오라클에서 일 것이다,하지만이 실행할 때 SQL 서버는 파이프 기호를 좋아하지 않는 한 발견

:

UPDATE INTERFACE 
SET OptionBits = substring(OptionBits,1,1)|| replace(substring(OptionBits,2,1), '0', '1')||substring(OptionBits,3, 14) 
WHERE ObjectNumber = 5 

나는 단지 하나를 업데이트 하시겠습니까이 객체 숫자 = 5입니다.

Replace을 사용하여 살펴 보았지만 해결책이 아닙니다.

트릭이란 무엇입니까?

미리 감사드립니다.

+1

컬럼의 이름은 실제로에서 * 복수 * 데이터 항목을 저장하고 제안 단일 열. 이것은 대개 잘못된 아이디어이며 이와 같은 복잡한 쿼리로 이어집니다. 여러 항목 (테이블)을 저장하기 위해 SQL이 지원하는 데이터 형식을 사용하는 것이 훨씬 더 좋습니다. 예 : 'CREATE TABLE 옵션들 (ObjectNumber int, OptionPosition int, OptionSetting bit)'. –

답변

0

'||' symbol은 Oracle에서 문자열 연결을 수행합니다. SQL Server의 상당 +입니다 :

MSSQL의 경우
UPDATE INTERFACE 
    SET OptionBits = substring(OptionBits,1,1) + replace(substring(OptionBits,2,1), '0', '1') + substring(OptionBits,3, 14) 
    WHERE ObjectNumber = 5 
+0

Gordon 고맙습니다. 지금 Oracle DB를 사용하고 있습니다. 매우 유용 할 것입니다. – user2343449

2

the STUFF function 아마도 최선의 방법입니다 :

UPDATE INTERFACE 
SET OptionBits = STUFF(OptionBits, 2, 1, '1') 
WHERE ObjectNumber = 5 
+0

하늘을 향한 오! 이제는 완벽하다고 언급 했으므로 아마도 2 년 전만해도 그 기능을 사용했습니다. – user2343449

관련 문제