source

DATE_SUB의 단위 파라미터에 저장 프로시저 파라미터 사용

ittop 2023. 9. 19. 21:24
반응형

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

반응형