데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
안녕하세요 신입개발자 질문있습니다.
현재 mssql 사용중이고 프로시저에서 select 문으로 조회하기 만들고 있습니다.
어느 회사측에서 item의 규격사이즈와 가격을 계산하여 M당 가격을 원하고 있습니다.
규격컬럼의 데이터 값은 0.02*105*500 이고 가격은 1000원이였을 때 단순 계산만 해보았을 때 가격 / M(500)을 하면 2가 나옵니다. ex) 만약 0.06*47*1000 이였을 때 가격이 79,903원(콤마) 이라면 단순 계산으로만 79.903원(소수점)이 나옵니다.
헷갈리실까봐 구분해놓겠습니다.
하지만 이렇게 단순 계산을 할 수가 없는 이유중
1. 규격 컬럼이 우선 nvarchar형식
2. 규격 컬럼의 길이는 데이터마다 다름
3. 정수로 치환하라고 하지만 되지 않음.
4. 검색해본 함수 중 SUBSTRING , CHARINDEX 등 검색해본걸로 했지만 방법을 모르는건지 되지않았구요.
IF 조건문을 만들어서 해야할지 감이 안오네요.아무리 머리를 굴려도 힘드네요 선배님들 제발 부탁드립니다..~~
규격 형태에서 마지막 * 뒤에 숫자만 필요하다면 아래와 같은 형태로 한번 응용해 보세요
;WITH CTE
AS
(
SELECT 10.000 AS [수량], 100.0000 AS [단가], N'0.02*105*500' AS [규격], 1000.0000 AS [공급 가격] UNION ALL
SELECT 10.000 AS [수량], 7990.3000 AS [단가], N'0.06*47*1000' AS [규격], 79903 AS [공급 가격]
)
SELECT *
, CAST(REVERSE(SUBSTRING(REVERSE([규격]), 0, CHARINDEX('*', REVERSE([규격])))) AS BIGINT) AS [M]
, [공급 가격] / CAST(REVERSE(SUBSTRING(REVERSE([규격]), 0, CHARINDEX('*', REVERSE([규격])))) AS BIGINT) AS [단순계산 M당 가격]
FROM CTE;