基于字段的MySQL语句

时间:2013-09-22 19:40:32

标签: mysql

我希望不再更新原作者的脚本 支持,但一直坚持我想做的一个改变。

如果我解释有困难,请道歉,因为我确信这是非常基本的。

我在一个文件中有一个MySQL语句,如下所示,但我现在想要 使用名称dformat向数据库添加其他字段。

以下是当前声明:

$SQL="SELECT `userid`, `score`, `summary`, `option`, DATE_FORMAT(`lastcheck`, '%d/%m/%y') AS `check`  FROM `".$dbpref."users` WHERE `active`='Y' AND `id`='".intval($_GET["user"])."'";

我希望改变的部分是这一点:

DATE_FORMAT(`lastcheck`, '%d/%m/%y') AS `check`

我希望能够检查新字段dformat和

dformat = 1然后DATE_FORMAT(lastcheck,'%d /%m /%y')AS check

但是

dformat = 2然后DATE_FORMAT(lastcheck,'%m /%d /%y')AS check

是否可以在SQL语句本身内而不是在?

之后执行上述操作

我试图寻找其他示例但是当应用于此时,错误就开始了 所以我显然没有说得对。

提前致谢!

2 个答案:

答案 0 :(得分:2)

您可以使用CASE声明执行此操作。

$SQL="SELECT `userid`, 
              `score`, 
            `summary`,
             `option`, 
             CASE WHEN dformat = 1 THEN DATE_FORMAT(lastcheck, '%d/%m/%y') 
                  WHEN  dformat = 2 then DATE_FORMAT(lastcheck, '%m/%d/%y') END AS `check`  
      FROM `".$dbpref."users` 
      WHERE `active`='Y' 
      AND `id`='".intval($_GET["user"])."'";

答案 1 :(得分:0)

在mysql中,您可以执行以下操作

$SQL="SELECT `userid`, `score`, `summary`, `option`, 
if(dformat=1 ,
DATE_FORMAT(`lastcheck`, '%d/%m/%y'), 
DATE_FORMAT(lastcheck, '%m/%d/%y')
) AS     `check`  FROM `".$dbpref."users` WHERE `active`='Y' 
AND  `id`='".intval($_GET["user"])."'";

即,如果dformat是表格中的字段。

作为旁注,我希望您不要将日期存储为文本,而是使用合适的类型(时间戳或日期时间)。