做什么:=在占位符的上下文中表示

时间:2013-01-14 13:18:32

标签: mysql sql

对于那些知道的人来说,这可能是一个愚蠢的问题,但这里也是如此。

尝试在查询中使用占位符。我发现以下工作:

SELECT day, @dy:=CAST( CASE day
                         WHEN 'Su' THEN 1
                         WHEN 'Mo' THEN 2
                         WHEN 'Tu' THEN 3
                         WHEN 'Wed' THEN 4
                         WHEN 'Th' THEN 5
                         WHEN 'Fr' THEN 6
                         WHEN 'Sa' THEN 7
                     END AS UNSIGNED) as dayofweek 
 FROM `Schedule_Repetition` WHERE repetition_Key='426';

但这不起作用

SELECT day, @dy=CAST( CASE day
                         WHEN 'Su' THEN 1
                         WHEN 'Mo' THEN 2
                         WHEN 'Tu' THEN 3
                         WHEN 'Wed' THEN 4
                         WHEN 'Th' THEN 5
                         WHEN 'Fr' THEN 6
                         WHEN 'Sa' THEN 7
                     END AS UNSIGNED) as dayofweek 
 FROM `Schedule_Repetition` WHERE repetition_Key='426';

我看到各种占位符的例子,其中一些使用@P=.....,另一些使用@P:=.......请有人解释:= 表示的内容以及语法变化的原因和/或指向文档的方式解释使用:=

1 个答案:

答案 0 :(得分:4)

:=assignment operator。以下信息来自dev.mysql.com上的documentation

  

作业运营商。导致用户变量在左侧   运营商将价值转移到其右侧。右边的值   hand side可以是文字值,另一个是存储值的变量,或者   产生标量值的任何合法表达式,包括结果   查询(如果此值是标量值)。

=:=之间的差异:

  

=赋值(作为SET语句的一部分,或作为UPDATE语句中SET子句的一部分)   :=分配值

     

与=不同,:=运算符永远不会被解释为比较   运营商。这意味着你可以在任何有效的SQL语句中使用:=(不是   只是在SET语句中)为变量赋值。

查看full list of operators on dev.mysql.com