Sql 将自定义查询值从一个插入到另一个,以及单独的对应字段

Sql 将自定义查询值从一个插入到另一个,以及单独的对应字段,sql,tsql,sql-server-2005,Sql,Tsql,Sql Server 2005,我有一个具有4个不同时间字段的表计时,即:时间、休息时间、午餐时间、午餐时间。我正在尝试查找记录的总小时数,即超时时间午餐时间午餐时间。我可以使用以下方法成功地完成: 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),

我有一个具有4个不同时间字段的表计时,即:时间、休息时间、午餐时间、午餐时间。我正在尝试查找记录的总小时数,即超时时间午餐时间午餐时间。我可以使用以下方法成功地完成:

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
我有另一个名为Attention的表,其中包含以下字段:fname、presenttime、date

create attendance timings
(
fname varchar(max),
presenttime datetime,
date datetime
)
我需要在出席人数中插入:

fname:fname来自计时

presenttime:time1-上面列出的查询结果

日期:当前系统日期。只有日期,而不是时间,需要从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'

谢谢

你让事情变得更复杂了。使用DATEDIFF时不必进行转换或除法。下面是查看如何工作的链接

尝试使用如下代码:

从计时中选择DATEDIFFhh、outtime\u d、intime\u a作为DiffHour,其中fname='abc'

从计时中选择DATEDIFFmi、outtime\u d、intime\u a作为DiffMinute,其中fname='abc'

从计时中选择DATEDIFFss、outtime\u d、intime\u a作为DiffSec,其中fname='abc'


如果您试图在“presenttime”字段中保存小时、分钟和秒,它将不起作用。如果要查找一个包含小时、分钟和天数据的字段,则应使用数据类型。

我最后将这两个字段的数据类型都更改为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'

现在的结果令人满意。

是的,这是我首先尝试做的,我的datediff查询给了我不正确的结果,但是您的工作发现,然后出现了一个问题,即没有将它们放在单个字段中。您试过查看TimeSpan数据类型吗?您将能够在1个字段中有小时、分钟和秒。