次のような列を持つ従業員テーブルがあります
emp_id, firstname, lastname, month and year.
今、私は 2012 年 1 月から 2012 年 3 月の間にテーブルから従業員を取得する必要があります。月と年
の列には、1月に「1」、3月に「3」、つまり月の数字と年の列に2012のような年が格納されています。
助けてください。
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)
SELECT *
FROM employee
WHERE to_char(year,0000) + to_char(month,00) BETWEEN '201201' AND '201203'
選択を行う前に、すべてを日時に変換するのが最善だと思います。個人的には、個別の「月」列と「年」列ではなく、単一の日時列を好みますが、そのようにできない場合は、次のような方法で機能します。
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に変換し、それらを変数に格納することでクリーンアップできるでしょうか?
こんにちはこれはあなたを助けるかもしれません、
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') ;
毎月と年の値を指定された形式のデータに変換して比較しています。