select中的mysql变量

时间:2012-02-09 11:46:38

标签: mysql

我可以在第二个选择中使用num_daysopen

SELECT
  DATEDIFF(DATE(NOW()), DATE(dateopened)) AS num_daysopen,
  (28 - DATEDIFF(DATE(NOW()), DATE(dateopened))) as days_left
FROM table

以下似乎不起作用,它会比上面的更具可读性吗?

SELECT
  DATEDIFF(DATE(NOW()), DATE(dateopened)) AS num_daysopen,
  (28 - num_daysopen) as days_left
FROM table

3 个答案:

答案 0 :(得分:2)

列别名无法在同一级别使用 因此,添加派生表以添加级别

SELECT
   num_daysopen,
   (28 - num_daysopen) as days_left
FROM
   (
    SELECT 
       DATEDIFF(DATE(NOW()), DATE(dateopened)) AS num_daysopen
    FROM 
       table
   ) T

请参阅MySQL文档中的"Problems with Column Aliases"

答案 1 :(得分:2)

docs

中所述
A select_expr can be given an alias using AS alias_name. The alias is used as the
expression's column name and can be used in GROUP BY, ORDER BY, or HAVING clauses.

别名不能在select_exprWHERE子句中使用。

答案 2 :(得分:0)

使用AS设置的别名用作表达式列。它不能用作变量,但可以再次用于引用该列。