>

KG로 변환해야하는 열에 파운드로 저장 무게가 있습니다. 간단한 쿼리로 할 수있었습니다 :

SELECT ( weight * 0.45 ) as weight from TABLE

그러나 범위로 저장된 값은 작동하지 않습니다 (예 : '200-300'. 동일한 쿼리를 사용하면 440.925 가 반환됩니다.   440-661 대신 . 나는 문자열을 곱하기 때문에 이것이 일어나고 있음을 이해하지만 원하는 결과를 얻기 위해 범위 값 (200-300)을 여러 번 할 수있는 방법이 있습니다.

그렇지 않으면이 범위를 어떻게 이상적으로 변환해야합니까?

  • 답변 # 1

    SUBSTRING_INDEX  여기에 유용합니다 :

    SELECT IF(
      INSTR(weight, '-') > 0, /* Does weight contain a dash? */
      CONCAT( /* Yes? Multiply each, and return them: */
          SUBSTRING_INDEX(weight, '-', 1) * 0.45,
          ' - ',
          SUBSTRING_INDEX(weight, '-', -1) * 0.45
      ),
      weight * 0.45 /* No? Just simply multiply the weight */
    ) AS `range`
    FROM test
    
    

    먼저 무게에 대시가 포함되어 있는지 확인하고, 있다면 무게를 나누고 개별적으로 곱하십시오.

    예를 참조하십시오 : https://www.db-fiddle.com/f/iELvWDjpVGBZEkpdR4jtsK/0

  • 답변 # 2

    질문을 제대로 이해하려면 다음과 같이해야합니다.

    SELECT
     CONCAT (
         SUBSTRING_INDEX(SUBSTRING_INDEX(column, ' - ', 1), ' - ', -1) * 0.45
       , ' - '
       , SUBSTRING_INDEX(SUBSTRING_INDEX(column, ' - ', 2), ' - ', -1) * 0.45
     )
    FROM
     table
    
    

    1) 중첩 SUBSTRING_INDEX  함수를 사용하면 문자열에서 항목을 추출 할 수 있습니다.
    2) MySQL 자동 유형 캐스트로 인해 CAST 기능이 필요하지 않습니다.

  • 답변 # 3

    CAST 및 SUBSTRING_INDEX 함수 사용.

    <올>

    CAST  '-'(하이픈) 문자의 양쪽에 더 많은 공백이 있어도 유효한 숫자로 변환됩니다. 당신은 DECIMAL(10,4) 를 변경할 수 있습니다  애플리케이션 요구 사항에 따라 모든 정밀도로

    SUBSTRING_INDEX  '-'(하이픈) 문자가 나타나기 전에 하위 문자열을 찾습니다.

    이것을 시도하십시오 :

    SELECT 
      CONCAT(CAST(SUBSTRING_INDEX(weight, '-', 1) AS DECIMAL(10,4)) * 0.45,
             '-', 
             CAST(SUBSTRING_INDEX(weight, '-', -1) AS DECIMAL(10,4)) * 0.45) 
      AS weight 
    FROM table
    
    

  • 이전 hashmap - Java에서 키를 기준으로 정렬하는 방법은 무엇입니까?
  • 다음 angularjs - Javascript에서 문자열을 true로 구문 분석