在SQL Server中将INT转换为日期时间

时间:2018-04-23 09:45:55

标签: sql sql-server

我在SQL数据库中有一个updated_time列,来自源系统的数据来自Int格式,例如165022,154914,175147,其中前2位表示小时,下2位表示分钟&持续2秒。我必须以日期时间格式将它们存储在数据库中,如-16:50:22。

我正在使用此查询 -

declare @upd_time int =165022 

select CAST(STUFF(STUFF(@upd_time,5,0,':'),3,0,':') AS time)

这样可以正常工作但是当我有5位数据时,比如 - 83714,应该转换为08:37:14,它会失败。 我尝试使用以下查询使用前导零填充数据 -

select Right('000000'+ convert(varchar,83714),6) as Time_Upd

STUFF 功能仍会忽略零&转换为83:71:4,无法在 CAST 中使用。针对此问题的任何解决方法?提前谢谢。

2 个答案:

答案 0 :(得分:2)

将问题视为数学问题而不是字符串问题。我们可以使用整数除法和模数来找到要添加到基准时间的正确值:

$year = 2018;
$month = 4;

$date_start = date('Y-m-d', strtotime(date($year.'-'.$month).' first day of this month'));
$date_end = date('Y-m-d', strtotime(date($year.'-'.$month).'last day of this month'));

echo $date_start . ' and ' . $date_end;

生成declare @upd_time int = 83714 select DATEADD(hour,@upd_time / 10000, DATEADD(minute,(@upd_time / 100) % 100, DATEADD(second,@Upd_time % 100,'00:00:00'))) datetime的值(如果需要,可以将其转换为1900-01-01 08:37:14.000

答案 1 :(得分:1)

这是因为你的变量upd_time是一个int变量。下面的代码应该为您完成工作:

declare @upd_time int =12345 
declare @new_upd_time varchar(6)
set @new_upd_time = right('000000' + cast(@upd_time as varchar(6)), 6)
declare @finaltime nvarchar(8)
set @finaltime = left(@new_upd_time,2) + ':' + left(right(@new_upd_time,4),2) +':'+right(@new_upd_time,2)
select @finaltime