Sean
asked on
Sql query help
Hi,
I have this sql query, that results in the attached output. What I need is another column that would give me the difference between column " Created Time" and " Fixed Time" in following format;
HH:MM
Thanks
I have this sql query, that results in the attached output. What I need is another column that would give me the difference between column " Created Time" and " Fixed Time" in following format;
HH:MM
Thanks
SELECT sinfo.WORKSTATIONNAME "Kiosk",
wo.WORKORDERID "Request ID" ,scd.Name "Issue"
,convert(varchar(16), dateadd(s,datediff(s,GETUTCDATE() ,getdate()) +(wo.CREATEDTIME/1000),'1970-01-01 00:00:00'), 121) "Created Time",
convert(varchar(16), dateadd(s,datediff(s,GETUTCDATE() ,getdate()) +(wo.COMPLETEDTIME/1000),'1970-01-01 00:00:00'), 121) "CompletedTime",
cast((((wo.timespentonreq)/1000)/3600) as varchar(20)) +':'+REPLACE(REPLACE(LEN(cast(((((wo.timespentonreq )/1000)/60)) % 60 as varchar(20))),
'1','0'+cast(((((wo.timespentonreq )/1000)/60)) % 60 as varchar(20))),'2',
cast(((((wo.timespentonreq)/1000)/60)) % 60 as varchar(20)))+':'+ REPLACE(REPLACE(LEN(cast((((wo.timespentonreq)%1000)%60) as varchar(20))),
'1','0'+cast((((wo.timespentonreq)%1000)%60) as varchar(20))),'2',cast((((wo.timespentonreq)%1000)%60) as varchar(20)))"Down Time",
convert(varchar(16), dateadd(s,datediff(s,GETUTCDATE() ,getdate()) +(wof.UDF_DATE1/1000),'1970-01-01 00:00:00'), 121) "Fixed Time",
wof.UDF_CHAR3 "Location"
FROM WorkOrder_Threaded wot
INNER JOIN WorkOrder wo ON wot.WORKORDERID=wo.WORKORDERID LEFT JOIN SystemInfo sinfo ON wo.WORKSTATIONID=sinfo.WORKSTATIONID LEFT JOIN WorkOrderStates wos ON wo.WORKORDERID=wos.WORKORDERID LEFT JOIN CategoryDefinition cd ON wos.CATEGORYID=cd.CATEGORYID LEFT JOIN SubCategoryDefinition scd ON wos.SUBCATEGORYID=scd.SUBCATEGORYID LEFT JOIN WorkOrder_Fields wof ON wo.WORKORDERID=wof.WORKORDERID WHERE (((DATEADD(s,wo.CREATEDTIME/1000,'01-01-1970 05:30')> convert(varchar,'2009-12-23 12:00',21) AND ((wo.CREATEDTIME != 0) AND (wo.CREATEDTIME IS NOT NULL))) AND (DATEADD(s,wo.CREATEDTIME/1000,'01-01-1970 05:30') <= convert(varchar,'2009-12-24 11:59',21) AND (((wo.CREATEDTIME != 0) AND (wo.CREATEDTIME IS NOT NULL)) AND (wo.CREATEDTIME != -1)))) AND (cd.CATEGORYNAME = N'Cajeros Only' COLLATE SQL_Latin1_General_CP437_CS_AS)) AND wot.THD_WOID=wot.WORKORDERID
sqlout3.jpg
ASKER
aneeshattingal:
Thank you for your response, this is what I get when I run your query:
Msg 8117, Level 16, State 1, Line 1
Operand data type varchar is invalid for subtract operator.
Thank you for your response, this is what I get when I run your query:
Msg 8117, Level 16, State 1, Line 1
Operand data type varchar is invalid for subtract operator.
SELECT a.*, CONVERT(char(4), cast("Created Time" as datetime) - cast("Fixed Time" as DATEtime ) , 108 ) as diff
FROM (
SELECT sinfo.WORKSTATIONNAME "Kiosk",
wo.WORKORDERID "Request ID" ,scd.Name "Issue"
,convert(varchar(16), dateadd(s,datediff(s,GETUT CDATE() ,getdate()) +(wo.CREATEDTIME/1000),'19 70-01-01 00:00:00'), 121) "Created Time",
convert(varchar(16), dateadd(s,datediff(s,GETUT CDATE() ,getdate()) +(wo.COMPLETEDTIME/1000),' 1970-01-01 00:00:00'), 121) "CompletedTime",
cast((((wo.timespentonreq) /1000)/360 0) as varchar(20)) +':'+REPLACE(REPLACE(LEN(c ast(((((wo .timespent onreq )/1000)/60)) % 60 as varchar(20))),
'1','0'+cast(((((wo.timesp entonreq )/1000)/60)) % 60 as varchar(20))),'2',
cast(((((wo.timespentonreq )/1000)/60 )) % 60 as varchar(20)))+':'+ REPLACE(REPLACE(LEN(cast(( ((wo.times pentonreq) %1000)%60) as varchar(20))),
'1','0'+cast((((wo.timespe ntonreq)%1 000)%60) as varchar(20))),'2',cast(((( wo.timespe ntonreq)%1 000)%60) as varchar(20)))"Down Time",
convert(varchar(16), dateadd(s,datediff(s,GETUT CDATE() ,getdate()) +(wof.UDF_DATE1/1000),'197 0-01-01 00:00:00'), 121) "Fixed Time",
wof.UDF_CHAR3 "Location"
FROM WorkOrder_Threaded wot
INNER JOIN WorkOrder wo ON wot.WORKORDERID=wo.WORKORD ERID
LEFT JOIN SystemInfo sinfo ON wo.WORKSTATIONID=sinfo.WOR KSTATIONID
LEFT JOIN WorkOrderStates wos ON wo.WORKORDERID=wos.WORKORD ERID
LEFT JOIN CategoryDefinition cd ON wos.CATEGORYID=cd.CATEGORY ID
JOIN SubCategoryDefinition scd ON wos.SUBCATEGORYID=scd.SUBC ATEGORYID
LEFT JOIN WorkOrder_Fields wof ON wo.WORKORDERID=wof.WORKORD ERID
WHERE (((DATEADD(s,wo.CREATEDTIM E/1000,'01 -01-1970 05:30')> convert(varchar,'2009-12-2 3 12:00',21) AND ((wo.CREATEDTIME != 0) AND (wo.CREATEDTIME IS NOT NULL))) AND (DATEADD(s,wo.CREATEDTIME/ 1000,'01-0 1-1970 05:30') <= convert(varchar,'2009-12-2 4 11:59',21) AND (((wo.CREATEDTIME != 0) AND (wo.CREATEDTIME IS NOT NULL)) AND (wo.CREATEDTIME != -1)))) AND (cd.CATEGORYNAME = N'Cajeros Only' COLLATE SQL_Latin1_General_CP437_C S_AS)) AND wot.THD_WOID=wot.WORKORDER ID
) A
FROM (
SELECT sinfo.WORKSTATIONNAME "Kiosk",
wo.WORKORDERID "Request ID" ,scd.Name "Issue"
,convert(varchar(16), dateadd(s,datediff(s,GETUT
convert(varchar(16), dateadd(s,datediff(s,GETUT
cast((((wo.timespentonreq)
'1','0'+cast(((((wo.timesp
cast(((((wo.timespentonreq
'1','0'+cast((((wo.timespe
convert(varchar(16), dateadd(s,datediff(s,GETUT
wof.UDF_CHAR3 "Location"
FROM WorkOrder_Threaded wot
INNER JOIN WorkOrder wo ON wot.WORKORDERID=wo.WORKORD
LEFT JOIN SystemInfo sinfo ON wo.WORKSTATIONID=sinfo.WOR
LEFT JOIN WorkOrderStates wos ON wo.WORKORDERID=wos.WORKORD
LEFT JOIN CategoryDefinition cd ON wos.CATEGORYID=cd.CATEGORY
JOIN SubCategoryDefinition scd ON wos.SUBCATEGORYID=scd.SUBC
LEFT JOIN WorkOrder_Fields wof ON wo.WORKORDERID=wof.WORKORD
WHERE (((DATEADD(s,wo.CREATEDTIM
) A
No need for the subquery. I would just do it like this:
....
convert(varchar(5), dateadd(s, datediff(s,GETUTCDATE() ,getdate()) + (wof.UDF_DATE1 - wo.CREATEDTIME)/1000 , 0), 108) as "Created Time" ,
....
....
convert(varchar(5), dateadd(s, datediff(s,GETUTCDATE() ,getdate()) + (wof.UDF_DATE1 - wo.CREATEDTIME)/1000 , 0), 108) as "Created Time" ,
....
SELECT sinfo.WORKSTATIONNAME "Kiosk",
wo.WORKORDERID "Request ID" ,scd.Name "Issue",
convert(varchar(16), dateadd(s,datediff(s,GETUTCDATE() ,getdate()) + (wo.CREATEDTIME/1000 ) ,'1970-01-01 00:00:00'), 121) as "Created Time" ,
convert(varchar(16), dateadd(s,datediff(s,GETUTCDATE() ,getdate()) + (wo.COMPLETEDTIME/1000),'1970-01-01 00:00:00'), 121) as "Completed Time",
convert(varchar(5), dateadd(ms, (wo.timespentonreq%1000)%60, dateadd(s, wo.timespentonreq/1000, 0)), 108) as "Down Time",
convert(varchar(16), dateadd(s, datediff(s, getutcdate(), getdate()), dateadd(ms, ((wof.UDF_DATE1%1000)%60), dateadd(s, wof.UDF_DATE1/1000, '1970-01-01'))), 121) "Fixed Time",
convert(varchar(5), dateadd(s, datediff(s,GETUTCDATE() ,getdate()) + (wof.UDF_DATE1 - wo.CREATEDTIME)/1000 , 0), 108) as "Created Time" ,
wof.UDF_CHAR3 "Location"
FROM WorkOrder_Threaded wot
INNER JOIN WorkOrder wo ON wot.WORKORDERID=wo.WORKORDERID LEFT JOIN SystemInfo sinfo ON wo.WORKSTATIONID=sinfo.WORKSTATIONID LEFT JOIN WorkOrderStates wos ON wo.WORKORDERID=wos.WORKORDERID LEFT JOIN CategoryDefinition cd ON wos.CATEGORYID=cd.CATEGORYID LEFT JOIN SubCategoryDefinition scd ON wos.SUBCATEGORYID=scd.SUBCATEGORYID LEFT JOIN WorkOrder_Fields wof ON wo.WORKORDERID=wof.WORKORDERID WHERE (((DATEADD(s,wo.CREATEDTIME/1000,'01-01-1970 05:30')> convert(varchar,'2009-12-23 12:00',21) AND ((wo.CREATEDTIME != 0) AND (wo.CREATEDTIME IS NOT NULL))) AND (DATEADD(s,wo.CREATEDTIME/1000,'01-01-1970 05:30') <= convert(varchar,'2009-12-24 11:59',21) AND (((wo.CREATEDTIME != 0) AND (wo.CREATEDTIME IS NOT NULL)) AND (wo.CREATEDTIME != -1)))) AND (cd.CATEGORYNAME = N'Cajeros Only' COLLATE SQL_Latin1_General_CP437_CS_AS)) AND wot.THD_WOID=wot.WORKORDERID
Sorry forgot to change the column name
SELECT sinfo.WORKSTATIONNAME "Kiosk",
wo.WORKORDERID "Request ID" ,scd.Name "Issue",
convert(varchar(16), dateadd(s,datediff(s,GETUTCDATE() ,getdate()) + (wo.CREATEDTIME/1000 ) ,'1970-01-01 00:00:00'), 121) as "Created Time" ,
convert(varchar(16), dateadd(s,datediff(s,GETUTCDATE() ,getdate()) + (wo.COMPLETEDTIME/1000),'1970-01-01 00:00:00'), 121) as "Completed Time",
convert(varchar(5), dateadd(ms, (wo.timespentonreq%1000)%60, dateadd(s, wo.timespentonreq/1000, 0)), 108) as "Down Time",
convert(varchar(16), dateadd(s, datediff(s, getutcdate(), getdate()), dateadd(ms, ((wof.UDF_DATE1%1000)%60), dateadd(s, wof.UDF_DATE1/1000, '1970-01-01'))), 121) "Fixed Time",
convert(varchar(5), dateadd(s, datediff(s,GETUTCDATE() ,getdate()) + (wof.UDF_DATE1 - wo.CREATEDTIME)/1000 , 0), 108) as [Created - Fixed] ,
wof.UDF_CHAR3 "Location"
FROM WorkOrder_Threaded wot
INNER JOIN WorkOrder wo ON wot.WORKORDERID=wo.WORKORDERID LEFT JOIN SystemInfo sinfo ON wo.WORKSTATIONID=sinfo.WORKSTATIONID LEFT JOIN WorkOrderStates wos ON wo.WORKORDERID=wos.WORKORDERID LEFT JOIN CategoryDefinition cd ON wos.CATEGORYID=cd.CATEGORYID LEFT JOIN SubCategoryDefinition scd ON wos.SUBCATEGORYID=scd.SUBCATEGORYID LEFT JOIN WorkOrder_Fields wof ON wo.WORKORDERID=wof.WORKORDERID WHERE (((DATEADD(s,wo.CREATEDTIME/1000,'01-01-1970 05:30')> convert(varchar,'2009-12-23 12:00',21) AND ((wo.CREATEDTIME != 0) AND (wo.CREATEDTIME IS NOT NULL))) AND (DATEADD(s,wo.CREATEDTIME/1000,'01-01-1970 05:30') <= convert(varchar,'2009-12-24 11:59',21) AND (((wo.CREATEDTIME != 0) AND (wo.CREATEDTIME IS NOT NULL)) AND (wo.CREATEDTIME != -1)))) AND (cd.CATEGORYNAME = N'Cajeros Only' COLLATE SQL_Latin1_General_CP437_CS_AS)) AND wot.THD_WOID=wot.WORKORDERID
ASKER
aneeshattingal:
This is the result of running your query. As you can see the times difference is not correct.
Thanks again for your help
sqlout5.jpg
This is the result of running your query. As you can see the times difference is not correct.
Thanks again for your help
sqlout5.jpg
ASKER
Hi ralmada:
this what i get when I run your query. As you can see the time difference is not correct.
Thanks again for your help
sqlout6.jpg
this what i get when I run your query. As you can see the time difference is not correct.
Thanks again for your help
sqlout6.jpg
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
ralmada,
It worked. You are two for two wise one. Thank you.
It worked. You are two for two wise one. Thank you.
ASKER
Thank you.
Regards,
aneeshattingal
Open in new window