2013-07-27 2 views
-1

다음과 같은 구성표가있는 표가 있습니다. 다른 열의 값을 조건으로 사용하여 열을 업데이트하는 방법은 무엇입니까?

meta_id meta_key meta_value 
1   key1   5 
2   key2  sometext 
3   key3  serialized_text 
4   key4   8 

는 지금은 성능상의 이유로 meta_value 컬럼의 "숫자 표현"나의 테이블에 네 번째 열을 추가했습니다. 하지만 기존 데이터를 업데이트해야합니다. 이것이 내가 필요한 방법입니다.

meta_id meta_key meta_value   num_value 
1   key1   5      5 
2   key2  sometext    NULL 
3   key3  serialized_text  NULL 
4   key4   8      8 

간단히 말해서 meta_value가 숫자 인 경우에만 네 번째 열을 업데이트하는 쿼리가 필요합니다. 다른 열을 기반으로 열을 어떻게 업데이트해야하는지 알고 있습니다. 조건은 내가 관심이있는 부분입니다
감사

+0

내 질문을 편집 할 수없는 이상한 일입니다. 404 오류 페이지에 도달했습니다! –

+0

'num_value' 열의 데이터 형식은 무엇입니까? – peterm

+0

길이가 32자인 'INT'입니다. –

답변

1

여기

UPDATE Table1 
    SET num_value = meta_value * 1 -- or just meta_value 
WHERE meta_value REGEXP '^[-]?[0-9]+$' 

그냥 SQLFiddle 데모

+0

감사하지만 숫자로만 기록 된 것이 아니라 모든 레코드를 업데이트했습니다. –

+0

@HamedMomeni 값에 숫자와 쉼표 만 포함되도록 답안의 패턴을 업데이트했습니다. 업데이트 된 답변 및 sqlfiddle 데모를 참조하십시오. 업데이트에서 int로 변환되어야하는'meta_value'에 10 진수 값을 기대하지 않으면 정규 표현식에서 쉼표를 제거 할 수 있습니다. – peterm

+0

음수가있을 수도 있습니다. 그래서 패턴은'^ ([-]?) [0-9] + $'이어야한다고 생각합니다. –

1

입니다보십시오. 데모 here

에서

UPDATE table 
    SET meta_value = null 
WHERE meta_value not regexp '^[0-9]+$'; 

관련 문제