计算sql server中varchar中的两列之间的时差

zbdgwd5y  于 2021-08-13  发布在  Java
关注(0)|答案(4)|浏览(252)

我的table是:

create table Test_Bench
(
    id int,
    start_time varchar(20),
    stop_time varchar(20)
)

我的数据集是:

insert into Test_Bench
values (1, '20200520070000', '20200520153000');

我想计算我的停止时间和开始时间之间的差,以分钟为单位,但是列在 varchar 格式在将varchar转换为int时出错。
我尝试将varchar转换为int、bigint、datetime、timestamp,但是它们都没有工作表已经存在,并且在创建时没有遵循正确的日期和时间数据类型。现在根据我的分析,我试图从中提取日期和时间,然后计算提取的时间之间的差异。我的预期产出是
差异(2020-05-2020 15:30:00-2020-05-2020 07:00:00)=510分钟

sulc1iza

sulc1iza1#

您可以使用cast或convert将varchar转换为int。从test\u bench中选择(cast(start\u time as int)-cast(stop\u time as int))
请试试这个。

ycggw6v2

ycggw6v22#

一点 STUFF() 和一个 TRY_CONVERT() 例子

Declare @YourTable Table ([id] varchar(50),[starttime] varchar(50),[endtime] varchar(50))
Insert Into @YourTable Values 
 (1,20200520070000,20200520153000)

Select *
      ,Minutes = DateDiff(MINUTE
                         ,try_convert(datetime,stuff(stuff(stuff(starttime,13,0,':'),11,0,':'),9,0,' '))
                         ,try_convert(datetime,stuff(stuff(stuff(endtime  ,13,0,':'),11,0,':'),9,0,' '))
                         )
 from @YourTable

退货

id  starttime       endtime         Minutes
1   20200520070000  20200520153000  510
juud5qan

juud5qan3#

这里也回答了类似的问题。对于特定的模式,请尝试以下操作:

SELECT id,
DATEDIFF(
  mi,
    CONVERT(DATETIME, STUFF(STUFF(STUFF(start_time,13,0,':'),11,0,':'),9,0,' ')),
    CONVERT(DATETIME, STUFF(STUFF(STUFF(stop_time,13,0,':'),11,0,':'),9,0,' '))
) AS DiffInMins
FROM Test_Bench

如果您可以将日期转换到表中,或者将转换抽象为自定义项,那就更好了,但这是基本的想法。

xytpbqjk

xytpbqjk4#

修复你的设计,然后这是微不足道的。有日期和时间数据类型,您应该使用它们来存储日期和时间值。那你只需要 DATEDIFF :

create table Test_Bench
(
    id int,
    start_time datetime2(0),
    stop_time datetime2(0)
)

insert into Test_Bench
values (1, '2020-05-20T07:00:00', '2020-05-20T15:30:00');
GO

SELECT DATEDIFF(MINUTE, start_time,stop_time)
FROM dbo.Test_Bench;

相关问题