1

OccurDatedatatype の列があるデータベース テーブルがありますDateTime

データはこんな感じ…

06-03-2013 06:47:49
06-03-2013 16:47:49

InTime、OutTime、WorkDuration を見つける必要があります。

私はこのようなクエリを使用しています

Min(convert(varchar(10),OccurDateTime,108)) AS InTime,
Max(convert(varchar(10),OccurDateTime,108)) AS OutTime,

しかし、計算中に問題に直面していますworkDuration

workDuration = 16:30:00 - InTime    //16:30:00 means 4:30 pm

Intime は今varchar(10)なのでDatetime.......から引くことはできません。

私が使用しているクエリ..

SELECT UserID AS EmpCode,FirstName,LastName,Department,convert(varchar(10),OccurDateTime,103) AS Date,Min(convert(varchar(10),OccurDateTime,108)) AS InTime,
Max(convert(DateTime,OccurDateTime,108)) AS OutTime,
convert(varchar(10),(Max(convert(DateTime,OccurDateTime,108))- Min(convert(DateTime,OccurDateTime,108))),108) as Work,

FROM TTransactionLog1
WHERE convert(varchar(10),OccurDateTime,103) = '14/03/2013'
GROUP BY UserID, FirstName, convert(varchar(10),OccurDateTime,103),LastName,Department

それで、皆さんは何か考えがあります......

4

3 に答える 3

2

あなたはを探してはいけMin/Max Dates ませんMin/Max of varchar。したがって、varcharに変換する前に日付を確認し、必要な形式の最終的なものとして変換してください。

また、Datediff関数を使用してを取得する必要がdifference of Max and Min datesあります。文字列をDatesとして渡す場合は、ISO format'yyyymmdd')を使用してくださいNOT culture specific。そうしないと、カルチャ設定が異なるサーバーでクエリが機能しない場合があります。

次のクエリが機能するはずです。

SELECT UserID AS EmpCode, FirstName, LastName, Department,
       --Convert(varchar(10), OccurDateTime, 103) AS  Date,
       Convert(varchar(10), Min(OccurDateTime), 108) AS InTime,
       Convert(varchar(10), Max(OccurDateTime), 108) AS OutTime,
       Convert(varchar(10), 
           Datediff(day,Min(OccurDateTime), Max(OccurDateTime)),108) as Work
FROM TTransactionLog1
WHERE OccurDateTime  = '20130314' --Note: ISO format 
GROUP BY UserID, FirstName, --OccurDateTime, 
        LastName, Department
于 2013-03-15T12:03:18.323 に答える
1
WITH A AS (SELECT CONVERT(DATETIME, '16:25:00') InTime)
SELECT
CONVERT(varchar(10),CONVERT(DATETIME, '16:30:00') - InTime,108) workDuration
FROM A  

出力:00:05:00
二重変換を使用すると、最初datetime計算を行い、その後に計算を行うようになると思います。convertvarchar

于 2013-03-15T12:00:19.427 に答える
0

2 つの日時の間隔を計算する場合は、datediff() を使用します。

于 2013-03-15T12:00:04.077 に答える