2

以下の例のような SQL クエリを作成しようとしていますが、現在の日付の午前 8 時と午後 4 時の日付の間の DateEntered フィールドを常に選択する必要があります。これについてどうすればよいかわかりません。誰か助けてくれませんか?

SELECT     OrderNumber
    , OrderRelease
    , HeatNumber
    , HeatSuffix
    , Operation
    , COUNT(Operation) AS [Pieces Out of Tolerance]
FROM         Alerts
WHERE     (Mill = 3) 
    AND (DateEntered BETWEEN GetDate '08:00' AND GetDate '16:00')
GROUP BY OrderNumber, OrderRelease, HeatNumber, HeatSuffix, Operation
4

5 に答える 5

3
DECLARE @TodayODBC varchar(30), @DateFrom datetime, @DateTo datetime
SET @TodayODBC = CONVERT(varchar(10), GETDATE(), 120)
SET @DateFrom = CONVERT(datetime, @TodayODBC + ' 08:00:00', 120)
SET @DateTo   = CONVERT(datetime, @TodayODBC + ' 16:00:00', 120)

SELECT OrderNumber, OrderRelease, HeatNumber, HeatSuffix, Operation,
    COUNT(Operation) AS [Pieces Out of Tolerance]
FROM Alerts
WHERE (Mill = 3) 
AND (DateEntered BETWEEN @DateFrom AND @DateTo)
GROUP BY OrderNumber, OrderRelease, HeatNumber, HeatSuffix, Operation

, 120は、ロケールに関係なく一定の ODBC 日時形式を指定します。

于 2012-06-21T15:15:57.243 に答える
3
SELECT     OrderNumber
    , OrderRelease
    , HeatNumber
    , HeatSuffix
    , Operation
    , COUNT(Operation) AS [Pieces Out of Tolerance]
FROM         Alerts
WHERE     (Mill = 3) 
    AND (datediff(dd,DateEntered,getdate()) = 0 AND Datepart(hh,DateEntered) BETWEEN '08' AND '16')
GROUP BY OrderNumber, OrderRelease, HeatNumber, HeatSuffix, Operation
于 2012-06-21T15:16:48.350 に答える
0

これはあなたのために働くかもしれません

 DateEntered BETWEEN dateadd(hour, 8, cast(cast(getdate() as date) as datetime)) AND 
                     dateadd(hour, 16, cast(cast(getdate() as date) as datetime))

ただし、(クエリのように)時間のある行は含まれますが、時間のある行は含まれ16:00:00.000'ません16:00:00.003'

17:00より前にすべての行を含める場合は、代わりにこれを使用してください。

 DateEntered >= dateadd(hour, 8, cast(cast(getdate() as date) as datetime)) AND
 DateEntered <  dateadd(hour, 17, cast(cast(getdate() as date) as datetime))
于 2012-06-21T15:27:43.290 に答える
0

SQL Server 2008 を使用しているため、日付または時刻としてキャストできます。現在の日付を 08:00 に取得するには、次を使用します。

(CAST(CAST(getdate() AS DATE) AS DATETIME) + CAST('08:00' AS TIME)) 

現在の日付を 16:00 に取得するには:

(CAST(CAST(getdate() AS DATE) AS DATETIME) + CAST('16:00' AS TIME)))

これをクエリに入れる:

SELECT OrderNumber
    , OrderRelease
    , HeatNumber
    , HeatSuffix
    , Operation
    , COUNT(Operation) AS [Pieces Out of Tolerance]
FROM         Alerts
WHERE     (Mill = 3) 
    AND (DateEntered 
        BETWEEN (CAST(CAST(getdate() AS DATE) AS DATETIME) + CAST('08:00' AS TIME)) 
        AND (CAST(CAST(getdate() AS DATE) AS DATETIME) + CAST('16:00' AS TIME)))
GROUP BY OrderNumber, OrderRelease, HeatNumber, HeatSuffix, Operation
于 2012-06-21T15:16:10.673 に答える
0
SELECT     OrderNumber
    , OrderRelease
    , HeatNumber
    , HeatSuffix
    , Operation
    , COUNT(Operation) AS [Pieces Out of Tolerance]
FROM         Alerts
WHERE     (Mill = 3) 
    AND (DateEntered BETWEEN DATEADD(hour, 8, CONVERT(datetime,CONVERT(date,getdate()))) AND DATEADD(hour, 18, CONVERT(datetime,CONVERT(date,getdate()))))
GROUP BY OrderNumber, OrderRelease, HeatNumber, HeatSuffix, Operation
于 2012-06-21T15:16:19.463 に答える