データベースに、従業員の開始日を保持するフィールドが1つあります。
そして、今月に1周年を迎える従業員の数を知りたいのですが。
例、従業員が作業を開始し07/12/2012
た場合、現在の日付がである場合01/12/2013
、それは彼/彼女の記念日です。
これは、各従業員の開始日のフォーマット文字列です07/12/2012
。そして、月と年(日付ではなく)だけを比較したいと思います。
誰かがそれを行う方法を教えてもらえますか?
データベースに、従業員の開始日を保持するフィールドが1つあります。
そして、今月に1周年を迎える従業員の数を知りたいのですが。
例、従業員が作業を開始し07/12/2012
た場合、現在の日付がである場合01/12/2013
、それは彼/彼女の記念日です。
これは、各従業員の開始日のフォーマット文字列です07/12/2012
。そして、月と年(日付ではなく)だけを比較したいと思います。
誰かがそれを行う方法を教えてもらえますか?
Transact-SQLには関数がありMONTH
ますYEAR
(MSSQLを使用していると仮定します)。(ここを参照)
startdate
したがって、テーブルにDATETIMEフィールドがある場合
SELECT * FROM employee WHERE MONTH(startdate)=12 AND YEAR(startdate)=2012
2012年12月に1周年を迎えるすべての従業員を獲得します。
編集
テーブルに文字列としての日付が含まれている場合はSUBSTRING(startdate,3,2)
、月(文字列として!)とSUBSTRING(startdate,6,4)
年を取得するために使用するか、CONVERT関数またはPARSE関数を使用してそれを日時に変換することができます(その後、上記のように使用MONTH
します)YEAR
2回目の編集
Linq to SQLを使用すると、次のようになります。
var result = from employees e
select e
where e.startdate.Month==DateTime.Now.Month
&& e.startdate.Year==DateTime.Now.Year;
(startdate
データベースの列のDATETIME
データ型が...)
それは超簡単:
SELECT *
From Member m
WHERE
MONTH(m.CreatedAt) = MONTH(GETDATE())
また、来年の記念日が必要な場合は、次を使用できます。
SELECT *
From Member m
WHERE
MONTH(m.CreatedAt) = MONTH(GETDATE()) and
YEAR(m.CreatedAt) = YEAR(GETDATE()) +1
SQLで処理するには、
SELECT * FROM [dbo].[Employee]
where (DATEPART(mm, [StartDate]) = Month(GetDate())
AND DATEPART(dd, [StartDate]) = Day(GetDate())
C#で
var aniveraries = from employee in employees
where
employee.StartDate.Month == DateTime.Now.Month &&
employee.StartDate.Year == DateTime.Now.Year
select employee;