0

次のような列を持つ従業員テーブルがあります

emp_id, firstname, lastname, month  and year.

今、私は 2012 年 1 月から 2012 年 3 月の間にテーブルから従業員を取得する必要あります の列には、1月に「1」、3月に「3」、つまり月の数字と年の列に2012のような年が格納されています。 助けてください。

4

4 に答える 4

3

2012 年 1 月から 3 月までの従業員:

select * from employee
where year = 2012 and month between 1 and 3

2012 年 1 月から 2013 年 3 月までの従業員:

select * from employee
where (year = 2012 and month between 3 and 12)
or (year = 2013 and month between 1 and 3)
于 2012-05-14T05:17:42.023 に答える
0
SELECT * 
FROM  employee
WHERE to_char(year,0000) + to_char(month,00) BETWEEN '201201' AND '201203'
于 2012-05-14T05:22:21.813 に答える
0

選択を行う前に、すべてを日時に変換するのが最善だと思います。個人的には、個別の「月」列と「年」列ではなく、単一の日時列を好みますが、そのようにできない場合は、次のような方法で機能します。

SELECT * FROM employees 
 WHERE CAST( CAST(year AS VARCHAR(4)) +
            RIGHT('0' + CAST(month AS VARCHAR(2)), 2) +
            '00'
            AS DATETIME)
BETWEEN
    CAST( CAST(start_year AS VARCHAR(4)) +
            RIGHT('0' + CAST(start_month AS VARCHAR(2)), 2) +
            '00'
            AS DATETIME)
AND
    CAST( CAST(end_year AS VARCHAR(4)) +
            RIGHT('0' + CAST(end_month AS VARCHAR(2)), 2) +
            '00'
            AS DATETIME)

残念ながら、それはちょっと醜いです。選択ステートメントの前に開始日と終了日をdatetimeに変換し、それらを変数に格納することでクリーンアップできるでしょうか?

于 2012-05-14T05:35:12.153 に答える
-1

こんにちはこれはあなたを助けるかもしれません、

 select * from emp
where to_date(concat('1-',concat(concat(month,'-'), year)),'DD-MM-YY') 
      between to_date('1-&month-&year' ,'DD-MM-YY') 
and   to_date('1-&month-&year' ,'DD-MM-YY') ;

毎月と年の値を指定された形式のデータに変換して比較しています。

于 2012-05-14T06:00:38.613 に答える