2017-12-19 3 views
0

나의 현재 테이블 UserId 여러 클라이언트에 대한 ys_ar_item14-ys_ar_item1 14 열이 enter image description hereSQL Server 2012에서 동적으로 테이블의 모든 값을 어떻게 바꿀 수 있습니까?

같다. 이 테이블의 값을 변경하거나 0을 1로 교체해야하고 1을 2로 교체해야하며 2는 3으로 대체해야하며 6은 7로 교체해야하며 nil은 0으로 대체해야합니다. 예를 들어

: ys_ar_item1은 31,245 대신 20134. 여기

3 열 샘플 테이블, 그것은 14

enter image description here

주 모든 컬럼을위한 것이어야한다 - 그것은 것 UserId 및 14 개의 열로 새 테이블을 만들 수 있습니다.

+0

@Sami을 - 나는 테이블의 모든 컬럼의 모든 값을 교체해야합니다. – KulOmkar

+0

'Ys_Ar_Item1' ... 데이터 유형이 varchar 또는 int입니까? – Sami

+0

datatype이 VARCHAR (MAX) – KulOmkar

답변

1

이미 언급했듯이 이는 잘못된 데이터베이스 디자인입니다. 하지만 당신은 원하는 결과를 얻기 위해 다음과 같은 기능을 시도 할 수 있습니다 :

CREATE FUNCTION ReplaceNumbers 
(
    @str varchar(max) 
) 
RETURNS varchar(max) 
AS 
BEGIN 

DECLARE @result varchar(max) 
DECLARE @cnt int=1 
WHILE @cnt <= LEN(@str) 
    BEGIN 
     SET @result = CONCAT(@result, 
          CASE WHEN SUBSTRING(@str,@cnt,1) IN ('0','1','2','3','4','5','6') 
          THEN CAST(PARSE(SUBSTRING(@str,@cnt,1) AS int)+1 AS varchar) 
          ELSE SUBSTRING(@str,@cnt,1) END) 

     SET @cnt = @cnt + 1 
    END; 

RETURN REPLACE(@result, 'nil', '0') 
END 

이처럼 사용

UPDATE myTable SET ys_ar_item1=dbo.ReplaceNumbers(ys_ar_item1) 
1

정말 나쁜 디자인 그리고 당신은 일을 열심히하게 문자열로 번호를 저장하지만, 난 그냥 그 기능 IIF(), TRY_CAST()REPLICATE() 사용하여 생각할 수 : 샘플에서

:

CREATE TABLE Sample (
    UserID INT, 
    Ys_Ar_Item1 VARCHAR(10), 
    Ys_Ar_Item2 VARCHAR(10), 
    Ys_Ar_Item3 VARCHAR(10) 
    -- Other columns 
    ); 

INSERT INTO Sample VALUES 
(1, '20134', 'nil NULL', '02341'); 

SELECT UserID, 
     IIF(TRY_CAST(Ys_Ar_Item1 AS INT) IS NULL, '0', CAST(REPLICATE('1', LEN(Ys_Ar_Item1)) AS INT) + CAST(Ys_Ar_Item1 AS INT)) AS Ys_Ar_Item1, 
     IIF(TRY_CAST(Ys_Ar_Item2 AS INT) IS NULL, '0', CAST(REPLICATE('1', LEN(Ys_Ar_Item2)) AS INT) + CAST(Ys_Ar_Item2 AS INT)) AS Ys_Ar_Item2, 
     IIF(TRY_CAST(Ys_Ar_Item3 AS INT) IS NULL, '0', CAST(REPLICATE('1', LEN(Ys_Ar_Item3)) AS INT) + CAST(Ys_Ar_Item3 AS INT)) AS Ys_Ar_Item3 
FROM Sample; 

주 귀하의 질문에 이미지로 포함시킨 데이터가 6보다 많지 않은 경우, 그러한 숫자가 있으면이 솔루션은 실패합니다.