2017-07-06 77 views
0

我有以下声明:如何设置变量在MySQL的

SELECT 
    start_date, 
    end_date, 
    DATE(now()) BETWEEN start_date AND end_date should_be_live 
FROM 
    mytable 
WHERE 
    DATE(now()) BETWEEN start_date AND end_date should_be_live = 1 

有没有一种方法来设置一个变量should_be_live =表达DATE(now()) BETWEEN start_date AND end_date。如果是这样,我将如何做到这一点?

回答

2

如果用“变量”表示“结果集中的列”,那么是的。你基本上是这样做:

SELECT start_date, end_date, 
     (DATE(now()) BETWEEN start_date AND end_date) as should_be_live 
FROM mytable; 

如果“变量”,你的意思是要在select定义列,然后过滤就可以了,你不能做到这一点与where(除非你使用子查询) 。您可以使用having

SELECT start_date, end_date, 
     (DATE(now()) BETWEEN start_date AND end_date) as should_be_live 
FROM mytable 
HAVING should_be_live = 1; 

此使用的having是一个MySQL扩展。

+0

是不是有像mysql中的'with'语句? – David542

+0

@ David542。 。 。还没。这是8.0版本的预期。 –

1

无遗憾的是,你将不得不重复同样的表达DATE(now()) BETWEEN start_date AND end_dateWHERE条款,除非您要访问它在外部查询像

SELECT * FROM (
SELECT 
    start_date, 
    end_date, 
    DATE(now()) BETWEEN start_date AND end_date as should_be_live 
FROM mytable) xxx 
WHERE should_be_live = 1; 

列别名设置只能由GROUP BYHAVINGORDER BY子句,而不是WHERE子句(即它是一个MySQL扩展,而不是标准SQL)