在mysql查询中使用if

2024-09-25 04:17:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经有了这个问题:

cursor.execute("SELECT calldate, dst, billsec, accountcode, disposition, 
                       (billsec/60*%s) as total 
                FROM   cdr 
                WHERE  calldate >= '%s' and calldate < '%s' 
                   and disposition like '%s' and accountcode = '%s' 
                   and dst like '%s'" %(rate, start_date, end_date, status, accountcode, destino)
              )

Obs:dst是一个电话号码。在

但现在我需要做的是:如果dst的第5个字符是<;=5,那么billsec/60*0.11作为total 否则billsec/60*0.16。在

有可能吗?在

这样我在mysql语法中得到了一个错误:

^{pr2}$

Tags: andfromexecutedateasselectcursorlike
2条回答

是的,这是可能的。Mysql查询可以包含if语句,只有它们被称为case语句,正如其他Piotr wada所指出的那样。在

{a1}

要从字符串中提取字符,请使用子字符串。 http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substr

所以完整的解决方案应该是:

case when cast(substring(dst,4,1), unsigned) <= 5 then 
   billsec/60*0.11
else
   billsec/60*0.16
end case

使用SELECT实际上指定要返回的列集。此集合可以是列的名称,也可以是这些列的特定转换,调用SQL函数。”如果“实际上与过程SQL更相关,那么在您的示例中,您需要一个称为CASE expression的东西。 诀窍是通过CASE表达式在结果集中定义列,如下所示

SELECT acol, bcol, ccol, dcol from t1 where ...

与…比较

^{pr2}$

现在不记得精确大小写的语法,但这是方法。此外,您可以命名结果列,例如

SELECT acol as uuu, CASE WHEN ... END as mmm, ccol as nnn, dcol as qqq FROM t1 where...

以此类推:)重点是要理解,SELECT实际上并没有选择要检索的列,而是定义了一组特定的结果列,其中一些列与表中的列相同,有些列作为列值转换的子结果或字符串、NULL或其他内容。在

相关问题 更多 >