我在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 中使用。针对此问题的任何解决方法?提前谢谢。
答案 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