1

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

在我的分贝中,我有一个名为 thing_status 的列,它是一个 tinyint。这些值是 0='Empty'、1='Full' 和 2='Removed'。

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

例如:

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

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

  1. 我可以使用 IF THEN 语句,但状态文本的实际列表大约是 6 项,因此使用该语句会非常难看和讨厌。
  2. 我可以创建另一个带有状态的表。但在我看来,如果这可以在查询中完成,那么它会更有效率。再加上一张只需要使用一次的 6 种东西的表格,似乎有点过头了。
4

2 回答 2

2

您可以使用 case 语句:

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对在这种情况下有用的数据类型感兴趣。

于 2013-06-20T01:31:06.627 回答
0

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

SELECT 
thing_id,
thing_status, 
ELT(thing_status, 'Empty', 'Full', 'Removed') AS thing_status_text;
于 2013-06-20T07:56:40.323 回答