0

私は 4 つの異なる時間フィールド、つまりインタイム、アウトタイム、ランチアウト、ランチインのテーブル タイミングを持っています。ログに記録された合計時間、つまり ((outtime-intime) - (lunchin-lunchout) を見つけようとしています。次を使用して正常に見つけることができます。

select convert (varchar(10),((outtime_d - intime_a)-(lunchin_c - lunchout_b)),8) as time1 from timings where fname = 'abc'

create table timings
(
fname varchar(max),
fid varchar(30) PRIMARY KEY CLUSTERED,
intime_a datetime,
outtime_d datetime,
lunchout_b datetime,
lunchin_c datetime
)

insert into timings values('Abc','4C00A2C82A0C','4/23/2012 2:07:51 PM','4/23/2012 9:07:51 PM','4/23/2012 4:12:51 PM','4/23/2012 5:07:51 PM')
time1 = 06:05:00

次のフィールドを持つ出席という別のテーブルがあります:fname、presenttime、date。

create attendance timings
(
fname varchar(max),
presenttime datetime,
date datetime
)

私は出席に挿入する必要があります:

fname: タイミングからの fname

presenttime: time1 - 上記のクエリの結果

date: 現在のシステム日付。(時刻ではなく日付のみ、getdate() 関数からタイムスタンプを削除する必要があります)

最初に datediff 関数を使用しようとしましたが、後で値を連結しましたが、間違った結果が得られました。

SELECT ROUND(cast((datediff(hh, outtime_d ,intime_a) / 60.0) as FLOAT),2) AS DiffHour from timings where fname = 'abc'
SELECT ROUND(cast((datediff(mi, outtime_d ,intime_a) / 60.0) as FLOAT),2) AS DiffMinute from timings where fname = 'abc'
SELECT ROUND(cast((datediff(ss, outtime_d ,intime_a) / 60.0) as FLOAT),2) AS DiffSec from timings where fname = 'abc'

ありがとう

4

2 に答える 2

0

フィールドの両方のデータ型を varchar に変更することになりました

そしてこれを使用しました:

insert into attendance(fname,presenttime,date)
SELECT 
fname, 
CAST(CONVERT (VARCHAR(10),((outtime_d - intime_a)-(lunchin_c - lunchout_b)),8) AS varchar(10)),
CONVERT (VARCHAR(10),getdate(),3)
FROM timings WHERE fname = 'abc'

結果は今のところ満足です。

于 2012-04-24T06:32:41.410 に答える
0

必要以上に複雑にしています。DATEDIFF を使用する場合、変換または除算する必要はありません。DATEDIFFがどのように機能するかを確認するためのリンクを次に示します。

次のようなコードを使用してみてください。

fname = 'abc' のタイミングから DATEDIFF(hh, outtime_d ,intime_a) AS DiffHour を選択

fname = 'abc' のタイミングから DATEDIFF(mi, outtime_d ,intime_a) AS DiffMinute を選択

fname = 'abc' のタイミングから DATEDIFF(ss, outtime_d ,intime_a) AS DiffSec を選択

現在の時間フィールドに時間、分、秒を保存しようとしても機能しません。時、分、日のデータを含む 1 つのフィールドを探している場合は、TimeSpanデータ型を使用する必要があります。

于 2012-04-23T19:56:57.007 に答える