我想执行 sp_send_dbmail 并将结果以 excel 格式通过电子邮件发送。我尝试过 .csv 和 .txt,但结果没有组织在整齐的列中。
这是我的代码
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'DBMail_profile',
@recipients = 'myaddress@me.com',
@subject = 'Test',
@query = N'EXEC DatabaseTest.dbo.test',
@attach_query_result_as_file = 1,
@query_result_width = 150,
@query_result_header= 1,
@query_attachment_filename = 'test.txt',
@importance = 'High',
@query_result_no_padding = 1
Run Code Online (Sandbox Code Playgroud)
也试过这个
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'DBMail_profile',
@recipients = 'myaddress@me.com',
@subject = 'Test',
@query = N'EXEC DatabaseTest.dbo.test',
@attach_query_result_as_file = 1,
@query_result_width = 150,
@query_result_header= 1,
@query_attachment_filename = 'test.csv',
@importance = 'High',
@query_result_no_padding = 1
Run Code Online (Sandbox Code Playgroud)
我希望我的结果采用整洁有序的格式。我的某些参数设置不正确吗?或者有没有办法将附件作为 .xls 或 .xlsx 文件?我可能解释不正确,我可以回答任何问题
这是我从 …
我试图从几行中添加时间,当它们加起来超过几个小时时,我没有得到我正在寻找的正确结果。想编写脚本TotalTime以允许超过 24 个 HH。不必是日期时间数据类型。
StartTime和FinishTime是 varchar(8) 数据类型。
这是代码和输出,其中TotalTime小于 24 小时且正确的结果
SELECT Codes = (DeptCode + '-' + OpCode)
,TotalTime = convert(time(0),dateadd(second,sum(datediff(second,StartTime,FinishTime)),0))
,Units = SUM(Units)
,UPH = cast(isnull(sum(Units) / nullif(sum(datediff(minute,StartTime,FinishTime))*1.0,0),0.0)*60 as decimal(10,0))
,'Goal%' = (convert(varchar,cast((isnull(sum(Units) / nullif(sum(datediff(minute,StartTime,FinishTime))*1.0,0),0.0)*60)/5101*100 as decimal(10,0))) + '%')
FROM PTW.dbo.TimeLog
WHERE DeptCode = 'HP' AND OpCode = 'FC'
GROUP BY DeptCode, OpCode
Run Code Online (Sandbox Code Playgroud)
结果正确
Codes TotalTime Units UPH Goal%
HP-FC 12:37:00 47200 3741 73%
Run Code Online (Sandbox Code Playgroud)
这是实际的分解来证明
ID# Codes TotalTime Units UPH Goal% AssociateName …Run Code Online (Sandbox Code Playgroud) 我有一个表(TimeLog)有2列(StartTime,TIME(0),NOT NULL)和(FinishTime,TIME(0),NOT NULL)我想写一个查询,它将减去(FinishTime - StartTime)AS ElapsedTime和以HH:MM:SS产生总和
我试过了
SELECT StartTime
,FinishTime
,REPLACE(CAST(CAST(DATEDIFF(Hour, StartTime, FinishTime )AS VARCHAR (2)) + ':' + CAST(DATEDIFF(MINUTE, StartTime, FinishTime )AS VARCHAR(2)) + ':'
+ Cast(DATEDIFF(Second, StartTime, FinishTime )AS VARCHAR (2)) AS VARCHAR(8)),'*','00') As ElapsedTime
FROM TimeLog
Run Code Online (Sandbox Code Playgroud)
StartTime FinishTime ElapsedTime
08:00:00 08:25:00 0:25:00
08:25:00 09:15:00 1:50:00
09:55:00 12:32:00 3:00:00
12:32:00 14:31:00 2:00:00
12:32:00 13:55:00 1:83:00
09:55:00 11:42:00 2:00:00
07:30:00 08:45:00 1:75:00
07:00:00 07:15:00 0:15:00
07:15:00 08:10:00 1:55:00
Run Code Online (Sandbox Code Playgroud)
但这只有在ElapsedTime低于一小时的情况下才有效.如果超过1小时,则结果格式不正确.有人可以帮忙吗?