2012-03-18 29 views
0

このサイトと他のサイトを検索しましたが、この正確なシナリオは見つかりませんでした。私はsqldatasourceが現在の週の日曜日と土曜日の間にあるレコードを返すクエリに基づいている私のページにgridviewを追加する必要があります。 (各レコードには1つの日付フィールドがあります)レコードは給与計算用で、給与計算週は日曜日から土曜日までです。私は現在の給料の週に該当するすべてのレコードを見つける必要があります。誰も私を正しい方向に向けることができますか?私はVBでコーディングしています。日曜日から土曜日までの日付のレコードを照会/返しますか?

答えて

1

これはSQLの質問ですので、dbmsにそれに応じてタグを付ける必要があります。

あなたはSQL-Serverを使用していると仮定すると、DATEPARTは、曜日の名前を取得するために使用することができますdatetimeフィールドのintDATENAMEとして平日を取得するために使用することができます。例えば

(土曜日へ日曜日を想定したが、実際に月曜日から金曜日までを意味します):それは週の最初の日何depends on regional settings

SELECT t.* 
FROM YourTable t 
WHERE DATEPART(weekday, YourDateField) BETWEEN 2 AND 6 

注こと。

:今週からレコードを選択したい場合。

SELECT t.* 
FROM YourTable t 
WHERE YourDateField >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) 
AND YourDateField < DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 

http://msdn.microsoft.com/en-us/library/ms186819.aspx

+0

[OK]をので、私はあなたの第二の提案を実装し、それが働いている: は、今ではあなたのクエリ/のStoredProcedureに正しいパラメータを渡すための唯一の問題です。しかし、それは日曜日から土曜日の代わりに月曜日から日曜日までをフィルタリングしています。 – sevenyearsrust

+0

だから、SQLを変更して、今は日曜日と土曜日の間に動作するように見えます。 (コードの次のコメントを参照してください)問題は、現在の1週間を超えて現在の日付のレコードを表示しないことです。たとえば、週03/18から土曜日03/24に週を与えると、03/20のクエリを実行すると、03/20以降のレコードは存在しなくても表示されません。 (03/21、03/22、03/23、03/24)この問題を解決し、その日に関係なくその日曜日/土曜日の週に該当するレコードを表示する方法はありますか? – sevenyearsrust

+0

Yourtableからあなたのテーブルから> YourDateField> = DATEADD(DAY、DATEDIFF(DAY、-1、GETDATE())/ 7 * 7、-1)YourDateField sevenyearsrust

0

私はあなたが(日曜日から土曜日まで)2日
間の従業員の作業時間を取得する方法を探しているとします。今日より前の日曜日の正確な日付が必要です。あなたの検索を停止したい場所あなたのendDateには依存しながら これは、この機能によって

Public Function FirstWeekDay(d as DateTime) As DateTime 
    While(d.DayOfWeek <> DayOfWeek.Sunday) 
     d.AddDays(-1) 
    End While 
    return d 
End Function 

を行うことができる返される日付は、あなたたstartDateです。
あなたの質問によると、この日付は次の土曜日です。 startDateに6日を追加するだけです。

SELECT w.* FROM workTime w WHERE w.empID = @empID AND w.workDate BETWEEN @startDate AND @endDate 
関連する問題