2012-04-18 4 views
0

내가 가지고있는 것처럼 보이는 테이블 :MySQL의 논리 텍스트 필드에 연산자와 정수

ATTRIBUTE1 | ATTRIBUTE2 
weight: 190| height: 175 
ctr: 400 | dmd: 19 

는이 분야에서 비교 작업을 할 수 있습니까?

마찬가지로 체중이 200 미만인 사람을 찾고 싶다면 문법이 어떻게 생겼을까요?

SELECT * FROM mytable WHERE attribute1 < '200' 

을하지만 필드가 정의하는 텍스트 "무게"가 있기 때문에 : I 필드에는 텍스트가 없다면 쿼리가 다음과 같을 것이다 파악, 나는이 작업을 수행하는 방법을 확실히 모르겠어요.

+0

Attribute1은 필드 이름입니까? "weight : 190 ctr : 400"필드 값입니까? 아니면 "weight : 190"필드 값입니까? –

+0

'Attribute1'과'attribute2'는 열 이름입니다. 필드 값은'ctr : 400'이됩니다. – Norse

+2

예 MySQL 문자열 함수의 조합을 사용하면이 값을 얻을 수 있지만 느린 쿼리가 발생합니다. 데이터베이스 구조를 수정하십시오. –

답변

2
where cast(substring(ATTRIBUTE1, instr(ATTRIBUTE1, ': ')+1) as unsigned) <200 

대안이 없기 때문에 :.

where cast(replace(Field_2, 'weight: ', '') as unsigned) > 180 
+0

이것은 내가 찾고 있었던 것이다. 감사. – Norse

3

오히려

CAST(SUBSTRING(attribute1, INSTR(attribute, ': ') AS SIGNED) 

값이 처음의 문자열을 포함하기 때문이다.

은 기본적으로 당신은 다음과 같이 수행합니다 ':'

는의 인덱스를 찾아 (실제 수까지 모든 것을 건너) 값에 대한 문자열로 사용합니다. 그럼 당신은

은 (어쩌면 당신은 INSTR에 +1을 추가 할 필요가 int로 캐스팅 잘 모르겠어요 내가 여기 MySQL의 클라이언트

+0

(i) 하나의 여분의 브래킷이 필요합니다 (ii) + 2가 아니라 + 1이 필요합니다. –

+0

설명해 주셔서 감사합니다. – Norse

관련 문제