【发布时间】:2014-12-27 08:03:03
【问题描述】:
CREATE TABLE offices
(`office_id` int,`country` varchar(50),`population` int)
;
INSERT INTO offices
(`office_id`,`country`,`population`)
VALUES
(1,'AU',20000),
(2,'US',1200),
(3,'UK',150000),
(4,'NZ',1200)
;
我在这样的存储过程中使用了一个可选的 where 子句:
DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(IN yr_val varchar(50))
BEGIN
SELECT *
FROM offices
WHERE yr_val IS NULL OR country RLIKE yr_val
ASC
END //
DELIMITER ;
我想知道是否有办法根据参数yr_where 将CASE WHEN 用于不同的Where Clause。如果为 1,则在 country 字段中查找值,如果为 2,则在 population 字段中查找:
DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(IN yr_where tinyint(1),IN yr_val varchar(50))
BEGIN
SELECT *
FROM offices
WHERE 1 = 1
CASE yr_where
WHEN 1 THEN AND country RLIKE yr_val
WHEN 2 THEN AND population > yr_val
ELSE 1 END
ASC
END //
DELIMITER ;
【问题讨论】:
标签: mysql sql database stored-procedures