그냥 숫자가 아닌 금액을 입력, 출력하는 부분에 천 자리 콤마를 추가하였다. 숫자를 받아 로컬 화폐 기준으로 콤마를 넣은 문자열로 반환하는 함수 toLocaleString()
가 있어서 사용했는데, 합계 연산을 할 때 문자열을 숫자로 다시 변환해주어야 하는 문제가 있었다. 처음엔 그걸 몰라서 input에 콤마가추가되는 순간 합계에 NaN이 들어가버리는 이유를 몰랐다.
javascript에서는 문자열에 * 1을 해주면 숫자로 형변환이 된다.
$(document).ready(function () {
// 금액 합계 기능
function setTotalPrice() {
var total = 0;
$(".PRICE").each(function() {
total += $(this).val().replace(/\D/g,'') * 1;
});
// 합계 출력
$("#priceTotal").html(total.toLocaleString());
}
setTotalPrice();
// 금액 입력 시 숫자 아닌 것 지우고 합계 업데이트
$('.PRICE').keyup(function(e){
if (/\D/g.test(this.value)){
this.value = this.value.replace(/\D/g, '');
}
this.value = (this.value * 1).toLocaleString();
setTotalPrice();
});
});
for (var i=0; i<4; i++) {
var input_price = document.getElementById("btExpVOList" + i + ".PRICE");
var select_payment = document.getElementById("btExpVOList" + i + ".PAYMENT_METHOD");
// 금액 비교를 위한 text -> int 형변환
input_price.value = input_price.value.replace(/\D/g,'') * 1;
// 금액 있는데 결제방법 선택 안한 경우 -> 리턴
if(input_price.value>0 && select_payment.value==999) {
// 다시 콤마 텍스트로 변환
input_price.value = (input_price.value * 1).toLocaleString();
alert("출장 비용 입력 시 결제방법을 반드시 선택해야 합니다.");
return;
}
// 금액 없는데 결제방법 선택된 경우 -> 결제방법 초기화
if(input_price.value==0 && select_payment.value!=999) {
select_payment.value=999;
}
// 콤마 포함한 text -> 콤마 제거 후 int 형변환
input_price.value = input_price.value.replace(/\D/g,'') * 1;
}
요구사항 1, sql 1, 2
프로그래머스 sql 고득점 키트를 전부 풀었다. 문제 대부분은 아주 쉬운 수준이었지만 가끔 어려운 것이 있었다.
ISNULL(컬럼명, '대체값')
: 컬럼의 값이 NULL이면 '대체값'을 넣어서 출력해준다.이름
컬럼의 값이 '이름1, 이름2, 이름3, 이름4, 이름5' 중 하나인 것들을 찾는데 사용했다.order by datediff(date1, date2) -> order by date1 - date2
date_format()
함수를 생각했는데 left(10)
으로 전체 date 중 앞 10자리인 yyyy-mm-dd
만 가져오는 방법도 가능했다.WITH 가상테이블명 AS (
SELECT 초기값 AS 컬럼명
UNION ALL
SELECT 쿼리
)
SELECT * FROM 가상테이블명;
WITH를 이용해 가상테이블을 생성해서 사용할 수 있다.
WITH RECURSIVE 가상테이블명 AS (
SELECT 초기값 AS 컬럼명1
UNION ALL
SELECT 컬럼명1 계산식 FROM 가상테이블명 WHERE 조건
)
-- 재귀로 임시 테이블 생성해서 사용하기
WITH RECURSIVE PRACTICE AS
(
SELECT 1 AS IDX
UNION ALL
SELECT IDX+1 FROM PRACTICE WHERE IDX<13
)
SELECT CONCAT(IDX, '의 아해') AS NAME FROM PRACTICE;