带 IF 的 MSSQL WHERE
MSSQL WHERE with IF
我正在尝试获取执行以下操作的查询:
SELECT * FROM Test
WHERE
IF Condition = True
Column1 = 'This'
Column2 = 'That'
ELSE
Column3 = 'This'
column4 = 'That'
我能在 where 子句中使用 If 条件找到的唯一东西是 CASES。我一直无法找到允许多个条件的案例的示例。
到目前为止,我必须通过在 SELECT 语句之外添加 If 并复制该语句但更改 WHERE 子句来实现此目的。
SELECT * FROM Test
WHERE
(Condition = True
AND Column1 = 'This'
AND Column2 = 'That')
OR
(Condition = FALSE
AND Column3 = 'This'
AND column4 = 'That')
您可以使用 PROCEDURE or FUNCTION 来执行此操作。
例如程序:
CREATE PROCEDURE test (IN _condition BOOLEAN, IN _this VARCHAR(255), IN _that VARCHAR(255))
BEGIN
IF _condition THEN
SELECT * FROM Test WHERE Column1 = _this AND Column2 = _that;
ELSE
SELECT * FROM Test WHERE Column3 = _this AND Column4 = _that;
END IF;
END;
到运行这个,只要执行CALL test(TRUE, 'This', 'That')
您可以将_condition替换为您自己的条件,例如:
CREATE PROCEDURE test1 (IN _number INT(11), IN _this VARCHAR(255), IN _that VARCHAR(255))
BEGIN
IF _number >= 2016 THEN
SELECT * FROM Test WHERE Column1 = _this AND Column2 = _that;
ELSE
SELECT * FROM Test WHERE Column3 = _this AND Column4 = _that;
END IF;
END;
并执行CALL test1(2015, 'This', 'That')
我正在尝试获取执行以下操作的查询:
SELECT * FROM Test
WHERE
IF Condition = True
Column1 = 'This'
Column2 = 'That'
ELSE
Column3 = 'This'
column4 = 'That'
我能在 where 子句中使用 If 条件找到的唯一东西是 CASES。我一直无法找到允许多个条件的案例的示例。
到目前为止,我必须通过在 SELECT 语句之外添加 If 并复制该语句但更改 WHERE 子句来实现此目的。
SELECT * FROM Test
WHERE
(Condition = True
AND Column1 = 'This'
AND Column2 = 'That')
OR
(Condition = FALSE
AND Column3 = 'This'
AND column4 = 'That')
您可以使用 PROCEDURE or FUNCTION 来执行此操作。
例如程序:
CREATE PROCEDURE test (IN _condition BOOLEAN, IN _this VARCHAR(255), IN _that VARCHAR(255))
BEGIN
IF _condition THEN
SELECT * FROM Test WHERE Column1 = _this AND Column2 = _that;
ELSE
SELECT * FROM Test WHERE Column3 = _this AND Column4 = _that;
END IF;
END;
到运行这个,只要执行CALL test(TRUE, 'This', 'That')
您可以将_condition替换为您自己的条件,例如:
CREATE PROCEDURE test1 (IN _number INT(11), IN _this VARCHAR(255), IN _that VARCHAR(255))
BEGIN
IF _number >= 2016 THEN
SELECT * FROM Test WHERE Column1 = _this AND Column2 = _that;
ELSE
SELECT * FROM Test WHERE Column3 = _this AND Column4 = _that;
END IF;
END;
并执行CALL test1(2015, 'This', 'That')