SQL语句中的“set + 0”有什么作用?

时间:2009-11-09 17:22:15

标签: sql mysql

我对这个SQL语句的含义感到困惑:

SELECT exhibitor_categories+0 from exhibitor_registry

什么是Exhibitor_categories + 0?它为返回的每一行返回一个数字。

Exhibitor_categories定义为:

set('contemporary', 'classical impression / transitional', 'outdoor', 'home accessories')

感谢您的时间:)

2 个答案:

答案 0 :(得分:7)

它将设定值转换为INTEGER

集合被视为位图,因此第一个值设置位0,第二个值设置位1等。

mysql> CREATE TABLE exhibitor_registry(exhibitor_categories set('contemporary',
'classical impression / transitional', 'outdoor', 'home accessories') NOT NULL);

Query OK, 0 rows affected (0.08 sec)

mysql> INSERT
    -> INTO    exhibitor_registry
    -> VALUES  ('contemporary,classical impression / transitional,outdoor');
Query OK, 1 row affected (0.03 sec)

mysql> SELECT  exhibitor_categories
    -> FROM    exhibitor_registry;
+----------------------------------------------------------+
| exhibitor_categories                                     |
+----------------------------------------------------------+
| contemporary,classical impression / transitional,outdoor |
+----------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT  exhibitor_categories + 0
    -> FROM    exhibitor_registry;
+--------------------------+
| exhibitor_categories + 0 |
+--------------------------+
|                        7 |
+--------------------------+
1 row in set (0.00 sec)

答案 1 :(得分:4)

检查http://dev.mysql.com/doc/refman/5.0/en/set.html是否有完整的瘦,但基本上这样的字段称为'set' - 它有一个可能的值列表,只能是其中的一个或多个。该值存储为数字...这意味着当有人将值设置为“户外”时,Exhibitor_categories实际上存储了值4,因为它设置了第三位 - “0100”。当你以后从数据库中取出值时,mysql会自动将'0100'变回'outdoor'。

但是,通过向查询添加+0,您可以强制结果保留一个数字,因此如果在这种情况下行的值设置为“outdoor”,您实际上会得到数字值“0100”。

为获取枚举和混淆而道歉。

为什么,你可能会问,它是将值设置为'0100'而不是仅仅说'3',就像在枚举中一样?因为一个集合可以包含多个值 - 如果选择'当前'(0001)和'户外'(0100)值,它将存储'0101'< - 设置第1和第3位,这将返回为'5 '如果你使用+0代码。