2016-07-08 9 views
0

우리는 예술에 관한 메타 데이터가있는 커다란 데이터베이스를 가지고 있습니다. 은 "형식"필드는 높이 X 폭[width] X [height]를 mySQL 필드에서 어떻게 바꿀 수 있습니까?

2000 이미지의 차원이 X 800

작업에 밀접한 아니지만

뒤로 이야기는 재미있다 :이 오래된 국제 대회에 미리 디지털 시대를 사용하다 묘사/기원 등이 항상 높이의 첫 번째와 두 번째로 그림의 크기를 선언 한 박물관과 예술 세계. 대부분은 초상화의 방향이었고, 나는 그 물질적 인 맥락에서 "물건"이 얼마나 높이인지를 처음 알았습니다.

그러나 오늘날의 디지털 세계에서의 표준 규칙은 [폭] X [높이]

사람이 지금

곳 item_format.format이 열

을 읽을 SQL 쿼리/문을 수립 할 수 "2000x900"하부 케이스 "X"와 공백

동일한 필드

900x2000로 대체 포함 /기둥?

내가 외부 livecode 스크립트 나 PHP 또는 뭔가 이렇게하지만, 어떤 종류의 SQL 문으로 그것을 할 수있는 방법이 있는지 과잉 보인다 수 있습니다 ...

(분명히 :)이 설정이 필요 문자열을 파싱 한 후 "x"로 구분합니다. 역순으로 재조 립 (항목 2 + "x"+ 항목 1)하고 동일한 열/필드에 다시 삽입하십시오. SQL이 실제로 가능한 일을 할 수 있는지 확실하지 않습니다 ... 가능하지 않거나 글쓰기가 어렵습니다. 그 쿼리.

+0

이 테이블에 몇 개의 행이 있습니까? 당신은 잠시 동안 alter 테이블에 불리한가? 이 기간 동안 다른 사용자가 활발합니까? – Drew

답변

2
@ cFreed의 대답에 유사

,하지만 난 내장 함수 SUBSTRING_INDEX()를 사용합니다. 좀 더 분명합니다.

BEGIN; 

UPDATE yourtable 
SET format = CONCAT(
    SUBSTRING_INDEX(format, 'x', -1), 
    'x', 
    SUBSTRING_INDEX(format, 'x', 1) 
); 

-- do a spot check that it did what you intended: 
SELECT format FROM yourtable LIMIT 20; 

COMMIT; 
+0

맞습니다. 이렇게하면 더 간단 해 보입니다. – cFreed

+0

@ Drew : 실패한 안전 전략에 대한 우려에 감사드립니다. cFreed가 옳다. 초보자 인 SQL 쿼리이지만 1995 년부터 웹 서버/서비스를 관리 해왔다.데이터베이스가 백업되고 스왑을 손상시키는 "가장자리"가 없는지 확인하기 위해 해당 열의 데이터에 대한 무결성 검사를 수행 할 계획입니다. 그리고 "WHERE"절을 추가하여 몇 가지 레코드를 테스트로 제한하여 데이터를 "맹렬히 공격"하지 않도록합니다 @ CFreed & Bill .. 감사 드리겠습니다. 오늘은 바쁘지만 오늘은 바쁠 것입니다. 나는 최선의 대답을 나중에 확인해 줄 것이다. 카우아이에서 환호 .. 사용자는 "브라마 (Brahma)" – user2081323

+0

@ bill-karwin Awesome ..이 일을 ... 고마워 ... – user2081323

1

이 솔루션은 MySQL (테스트하지 않음)에서 작동해야합니다. 다른 DB를 사용하는 경우 가능한 구문 변형이 있는지 확인하십시오.

UPDATE table_name SET format = 
CONCAT(
    SUBSTR(format, -POSITION('x', format) - 1), 
    'x', 
    SUBSTR(format, 0, POSITION('x', format) - 1) 
) 
+0

데이터를 먼저 백업하십시오. 이 사람이 살거야! – Drew

+0

@Drew OP가 필요로하는 것이고, 그가하고있는 일을 잘 알고 있다고 생각합니다. – cFreed

+0

살 필요가 없습니다. 그들이 무엇을하고 있는지 알면 왜 그들이 여기에 있을까요? – Drew

관련 문제