0

私の従業員テーブルには、1A、1B、1C、2A、2B、および 2C などの値を含む作業レベルの列があります。従業員の階層は 2C > 2B > 2A > 1C > 1B > 1A です。

今、次のようなクエリを書くと:

SELECT *
FROM employee
WHERE work_level >= 1C

作業レベル 1C、2A、2B、2C のみを含む行を返すでしょうか?

そうでない場合、どうすればよいですか?

4

2 に答える 2

1

はい、目的の行が返されますが、where句に逆コンマを追加することを忘れないでください::

SELECT * FROM employee WHERE work_level >= '1C'
于 2012-07-15T05:56:38.017 に答える
0

このようなものを試してください:

work_level以下に定義され ているように、いくつかのsと入力があるとしましょう:

set @work_level1 = '25C';  
set @input_work_level1 = '1C';  

set @work_level2 = '2C';  
set @input_work_level2 = '15C';  

set @work_level3 = '2A';  
set @input_work_level3 = '1C';  

set @work_level4 = '2C';  
set @input_work_level4 = '15B';  

次のクエリを実行します。

select   
 ( cast( left(@work_level1, length(@work_level1)-1) as unsigned )
   >=
   cast( left(@input_work_level1, length(@input_work_level1)-1) as unsigned )
 )
 and
 right(@work_level1, 1) <= right(@input_work_level1, 1)
 as '''25C'' >= ''1C''',

 ( cast( left(@work_level2, length(@work_level2)-1) as unsigned )
   >=
   cast( left(@input_work_level2, length(@input_work_level2)-1) as unsigned )
 )
 and
 right(@work_level2, 1) <= right(@input_work_level2, 1)
 as '''2C'' >= ''15C''',

 ( cast( left(@work_level3, length(@work_level3)-1) as unsigned )
   >=
   cast( left(@input_work_level3, length(@input_work_level3)-1) as unsigned )
 )
 and
 right(@work_level3, 1) <= right(@input_work_level3, 1)
 as '''2A'' >= ''1C''',

 ( cast( left(@work_level4, length(@work_level4)-1) as unsigned )
   >=
   cast( left(@input_work_level4, length(@input_work_level4)-1) as unsigned )
 )
 and
 right(@work_level4, 1) <= right(@input_work_level4, 1)
 as '''2C'' >= ''15B'''
;

結果:

+---------------+---------------+--------------+---------------+
| '25C' >= '1C' | '2C' >= '15C' | '2A' >= '1C' | '2C' >= '15B' |
+---------------+---------------+--------------+---------------+
|             1 |             0 |            1 |             0 |
+---------------+---------------+--------------+---------------+
于 2012-07-15T17:55:15.163 に答える