0

注文の納期を示す MS Access クエリがあります。2 つの問題:

  1. 時間は 24 時間制 (例: 0105) であるため、CPOE 時間から検証時間を差し引くと、分でも時間でもない値が得られるため、単純に分に変換することはできません (つまり、 : 0701 – 0527 = 174、実際の差は 94 分)、
  2. CPOE 時刻が午前 0 時より前で、検証時刻が午前 0 時より後の場合、差は非常に歪んでいます (つまり、2351 – 0024 = 2327、実際の差は 33 分です)。

誰でもこれを解決する方法を知っていますか? SQL クエリは次のとおりです。

 SELECT 
    BI.PTNAME, 
    PHM_POE_HIST.FUNCTION, 
    PHM_ORDERS.VALIDATED_DATE, 
    PHM_ORDERS.VALIDATED_BY, 
    SAT.USER_NAME, 
    PHM_ORDERS.VALIDATED_TIME, 
    Right([TRAN_DATE_TIME],4) AS CPOE_TIME, 
    Abs([validated_time]-[CPOE_TIME]) AS Diff, 
    PHM_POE_HIST.TRAN_DATE_TIME, 
    PHM_POE_HIST.EFF_DATE_TIME, 
    PHM_POE_HIST.HIST_SEQ, BI.NRS_STATION, 
    SITE.NAME, PHM_ORDERS.PMP, 
    PHM_ORDERS.PRIORITY, 
    Trim([GENERIC_NAME] & " " & [STRENGTH] & " " & [STRENGTH_UNIT] & " " & [DOSAGE_FORM] & " " & [LATIN_DIR_ABBR]) AS DESCRIPTION 
FROM 
    ((BI LEFT JOIN 
            (PHM_ORDERS LEFT JOIN PHM_POE_HIST ON (PHM_ORDERS.POE_ORDER_NUMBER = PHM_POE_HIST.POE_ORDER_NUMBER) AND (PHM_ORDERS.ITN = PHM_POE_HIST.ITN))
        ON BI.ITN = PHM_ORDERS.ITN) 
    LEFT JOIN SAT
         ON PHM_ORDERS.VALIDATED_BY = SAT.USER_INITIALS)
    LEFT JOIN SITE 
        ON BI.SITE = SITE.SITE
WHERE 
    (((BI.PTNAME) Is Not Null) 
    AND ((PHM_POE_HIST.FUNCTION)="NW") 
    AND ((PHM_ORDERS.VALIDATED_DATE)=datereltoday(-1)) 
    AND ((PHM_ORDERS.PRIORITY)="STAT"));
4

1 に答える 1

4

日付や時刻で計算しないでください...決して。ミリタリー タイムは視覚的な形式であるため、時間と分を解析します。

データ型が char(4) であると仮定します

LEFT(MilitaryTimeColumn, 2) => hours
RIGHT(MilitaryTimeColumn, 2) => minutes

次に数値に変換します

CInt(LEFT(MilitaryTimeColumn, 2)) --> hours as integers
CInt(RIGHT(MilitaryTimeColumn, 2)) --> minutes as integers

合計分を計算する

CInt(LEFT(MilitaryTimeColumn, 2)) * 60 + CInt(RIGHT(MilitaryTimeColumn, 2))

その後、元の日付に追加します

DateAdd("n", 
    CInt(LEFT(MilitaryTimeColumn, 2)) * 60 + CInt(RIGHT(MilitaryTimeColumn, 2)), 
    DateColumn) --> Complete datetime

次にDateDiff、日付間の距離を取得するために使用します。

于 2013-02-27T01:01:17.067 に答える