반응형
DATE_SUB의 단위 파라미터에 저장 프로시저 파라미터 사용
mysql 저장 프로시저에 parameter를 전달하여 DATE_SUB 함수의 단위 parameter로 사용할 수 있는지 알고 싶습니다.유닛 파라미터가 예약어인 것 같아서 유닛 종류가 있는지 모르겠네요.
제가 하려는 일의 예시:
DELIMITER $$
DROP PROCEDURE IF EXISTS `test` $$
CREATE DEFINER=`root`@`%` PROCEDURE `test`(param1 unit)
BEGIN
select DATE_SUB(now(), INTERVAL 1 param1);
END $$
DELIMITER ;
업데이트 1 준비문으로 시도했는데 저장 프로시저를 만들 수 있습니다.
DELIMITER $$
DROP PROCEDURE IF EXISTS `test` $$
CREATE DEFINER=`root`@`%` PROCEDURE `test`(param1 varchar(10))
BEGIN
PREPARE stmt FROM 'SELECT DATE_SUB(now(), INTERVAL 1 ?)';
EXECUTE stmt USING @param1;
END $$
DELIMITER ;
실행했을 때 : CALL test('WEEK'); SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 1행에서 '?'에 가까운 구문을 사용하는 것이 올바른지 확인하십시오.
저장 프로시저에서는 준비된 문이 있든 없든 수행하려는 작업을 수행할 수 없습니다.
이와 유사한 작업을 수행할 수 있습니다.
DELIMITER $$
DROP PROCEDURE IF EXISTS test_proc $$
CREATE PROCEDURE test_proc(param1 varchar(20))
BEGIN
CASE UPPER(param1)
WHEN 'MICROSECOND' THEN select DATE_SUB(now(), INTERVAL 1 MICROSECOND);
WHEN 'SECOND' THEN select DATE_SUB(now(), INTERVAL 1 SECOND);
WHEN 'MINUTE' THEN select DATE_SUB(now(), INTERVAL 1 MINUTE);
WHEN 'HOUR' THEN select DATE_SUB(now(), INTERVAL 1 HOUR);
WHEN 'DAY' THEN select DATE_SUB(now(), INTERVAL 1 DAY);
WHEN 'WEEK' THEN select DATE_SUB(now(), INTERVAL 1 WEEK);
WHEN 'MONTH' THEN select DATE_SUB(now(), INTERVAL 1 MONTH);
WHEN 'QUARTER' THEN select DATE_SUB(now(), INTERVAL 1 QUARTER);
WHEN 'YEAR' THEN select DATE_SUB(now(), INTERVAL 1 YEAR);
ELSE select 'UNEXPECTED UNIT';
END CASE;
END $$
DELIMITER ;
언급URL : https://stackoverflow.com/questions/45262042/how-can-i-use-functions-parameter-in-it
반응형
'source' 카테고리의 다른 글
문서의 시작 부분에만 XML 선언이 허용됨 (0) | 2023.09.19 |
---|---|
PHP/MySQL에서 페이지 뷰를 세는 가장 좋은 방법은 무엇입니까? (0) | 2023.09.19 |
Internet Explorer 캐싱 asp.netmvcjax 결과 (0) | 2023.09.19 |
JUNIT XML 출력 규격 (0) | 2023.09.19 |
사용자 지정 cmdlet에서 -verbose 및 -debug 매개 변수를 적절하게 사용하는 방법 (0) | 2023.09.19 |