laravel SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect decimal value: 'buy_amt * 0.00097812555575316' for column 'price' at row 1 에러

조회수 818회

전체 데이터를 업데이트 하려고 하는데 매입가에 마진율 계산해서 환율만큼 나눠야하는데 데이터 포맷 에러가 나네요ㅠㅠ;

SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect decimal value: 'buy_amt * 0.00097812555575316' for column 'prod' at row 1 (SQL: update prod set value = 10, price = buy_amt * 0.00097812555575316 )

에러코드에 나오는 sql을 돌리면 제대로 실행되는데 뭐가 문제일까요

use DB;

DB::update("update prod set value = ?, price = ?,  ",
            [
                $datas["value"],
                "buy_amt * ".(1+($datas["value"]/100))/$datas["price"],
            ]);
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 그러니까 mysql이 직접 연산을 하게 하고 싶으신 거죠? 그럴 땐 DB::raw()를 쓰셔야 합니다.

    이런 사례를 참고해 보면 대략 이렇게 하시면 되겠네요.

    DB::table('prod')->update([
        'value' => $datas["value"],
        'price' => DB::raw("buy_amt * ".(1+($datas["value"]/100))/$datas["price"])
    ]);
    

    PS: 개인적으로는 mysql이 연산하게 하는 것을 권하지 않습니다. 업데이트 날리기 전에 소스에서 필요한 계산값을 구하고 그 결과만 업데이트문에 넣어주는 것이 (PHP쪽이나 mysql쪽이나) 더 빠르고 원활할 겁니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)