1

tinyint 列の値を定義済みのテキストとして返そうとしています。

私のdBには、tinyintであるthing_statusという列があります。値は、0 =「空」、1 =「いっぱい」、および 2 =「削除済み」です。

クエリを実行するときに、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 に答える