我们公司将来电呼叫记录到SQL表中VarChar字段中的不同代理。此字段为EventLog
。
因此,Select EventLog From DB Where CallID = 'Long_String_of_Numbers'
会在一个 LONG 行中产生以下内容:
21:02:10: Initializing 21:02:10: Offering 21:02:10: ANI: 5551234567 21:02:10: DNIS: 1032 21:02:10: Call answered 21:02:10: Call from: 5551234567 21:02:12: Offering 21:02:12: Entered Workgroup Clients 21:02:20: ACD - Wait Agent 21:02:20: ACD - Wait Agent 21:02:20: ACD - Wait Agent 21:02:20: ACD call waiting for agent 21:05:47: ACD interaction assigned to arnoldSW 21:05:47: ACD call waiting for agent 21:05:47: ACD - Alerting: arnoldSW 21:05:48: Offering 21:05:48: Sent to user arnoldSW 21:05:48: Alerting 21:05:48: Sent to station WOLF1 21:05:51: Connected 21:05:51: ACD interaction connected to arnoldSW 21:05:51: ACD - Assigned: arnoldSW 21:15:34: Sent to station ABC 21:16:42: Held 21:17:19: Connected 21:17:19: Sent to user northSK 21:20:04: Disconnected [Local Hang Up]
为简单起见,这里的格式化字符串在一行中:
21:02:10: Initializing
21:02:10: Offering
21:02:10: ANI: 5551234567
21:02:10: DNIS: 1032
21:02:10: Call answered
21:02:10: Call from: 5551234567
21:02:12: Offering
21:02:12: Entered Workgroup Clients
21:02:20: ACD - Wait Agent
21:02:20: ACD - Wait Agent
21:02:20: ACD - Wait Agent
21:02:20: ACD call waiting for agent
21:05:47: ACD interaction assigned to arnoldSW
21:05:47: ACD call waiting for agent
21:05:47: ACD - Alerting: arnoldSW
21:05:48: Offering
21:05:48: Sent to user arnoldSW
21:05:48: Alerting
21:05:48: Sent to station WOLF1
21:05:51: Connected
21:05:51: ACD interaction connected to arnoldSW
21:05:51: ACD - Assigned: arnoldSW // Duration From HERE ...
21:15:34: Sent to station ABC
21:16:42: Held
21:17:19: Connected
21:17:19: Sent to user northSK
21:20:04: Disconnected [Local Hang Up] // ... To Here
在ACD - Assigned
和Disconnected
之间计算持续时间的最有效方法是什么? (注意:在这些事件发生之前,之间和之后记录的步骤数量各不相同,我需要为至少19,000次呼叫执行此操作。因此,这是构建统计信息的有效方法。)
答案 0 :(得分:3)
很多问题,比如这个,归结为糟糕的架构。然而,如果你不能改变它,那么你可以做类似于下面的事情。它搜索字段名称,备份适当数量的字符,并将时间转换为实际时间数据类型,以便它可以使用DATEDIFF计算秒数。我在几秒钟之后离开了它,因为你没有指定你想要如何舍入到分钟,但转换成分钟很简单。
DECLARE @test varchar(2048)
SET @test = '21:02:10: Initializing 21:02:10: Offering 21:02:10: ANI: 5551234567 21:02:10: DNIS: 1032 21:02:10: Call answered 21:02:10: Call from: 5551234567 21:02:12: Offering 21:02:12: Entered Workgroup Clients 21:02:20: ACD - Wait Agent 21:02:20: ACD - Wait Agent 21:02:20: ACD - Wait Agent 21:02:20: ACD call waiting for agent 21:05:47: ACD interaction assigned to arnoldSW 21:05:47: ACD call waiting for agent 21:05:47: ACD - Alerting: arnoldSW 21:05:48: Offering 21:05:48: Sent to user arnoldSW 21:05:48: Alerting 21:05:48: Sent to station WOLF1 21:05:51: Connected 21:05:51: ACD interaction connected to arnoldSW 21:05:51: ACD - Assigned: arnoldSW 21:15:34: Sent to station ABC 21:16:42: Held 21:17:19: Connected 21:17:19: Sent to user northSK 21:20:04: Disconnected [Local Hang Up]'
SELECT
CAST(SUBSTRING(@test, PATINDEX('%ACD - Assigned:%', @test) - 10, 8) AS time) AS AssignedTime,
CAST(SUBSTRING(@test, PATINDEX('%Disconnected%', @test) - 10, 8) AS time) AS DisconnectTime,
DATEDIFF(second,
CAST(SUBSTRING(@test, PATINDEX('%ACD - Assigned:%', @test) - 10, 8) AS time),
CAST(SUBSTRING(@test, PATINDEX('%Disconnected%', @test) - 10, 8) AS time)) AS SecondsElapsed