将tinyint值作为MySQL查询中的预定义文本返回

时间:2013-06-20 01:27:17

标签: mysql

我正在尝试将tinyint列的值作为预定义文本返回。

在我的dB中,我有一个名为thing_status的列,它是一个tinyint。值为0 ='空',1 ='完全',2 ='已删除'。

当我进行查询时,我想添加一个包含thing_status文本表示的额外条目。

例如:

SELECT
   thing_id,
   thing_status,
   {function to convert status to string} AS thing_status_text

我已经有了两个想法,但似乎都不合适:

  1. 我可以使用IF THEN语句,但实际的状态文本列表大约有6个项目,因此该语句会非常丑陋且难以使用。
  2. 我可以用状态创建另一个表。但在我看来,如果这可以在查询中完成,那么它会更有效率。另外还有另外一个表,只需要使用一次就可以使用一次就好了。

2 个答案:

答案 0 :(得分:2)

您可以使用案例陈述:

select thing_id, thing_status,
       (case when thing_status = 0 then 'Empty'
             when thing_status = 1 then 'Full'
             when thing_status = 2 then 'Removed'
       end) as thing_status_text

您也可以将其放入视图中,因此任何想要使用它的查询都可以使用它。

但是,您可能也对enum感兴趣,{{1}}是一种在这种情况下有用的数据类型。

答案 1 :(得分:0)

最简单的方法是使用ELT()运算符:

SELECT 
thing_id,
thing_status, 
ELT(thing_status, 'Empty', 'Full', 'Removed') AS thing_status_text;