我有代表军事时代的varchars:
static void Main(string[] args)
{
data[0] = "...";
...
data[x] = "...";
//user input own data or chooses data set
...
bool mode = true/false; //user chooses computing mode
Matrix matrix = new Matrix(mode, data[indexOfSet]);
matrix.DoSomethingOther();
//several ref matrix manipulation methods
Console.WriteLine(matrix.DoSomethingSame);
左两个字符始终代表分钟。在示例c和c中,大于10和1始终是分钟。示例b 103具有三个字符。在这种情况下,1是小时03是分钟。
如何将其转换为时间hh:mm格式?
答案 0 :(得分:3)
一个选项用于使用Format()
示例
Declare @YourTable table (SomeCol int)
Insert into @YourTable values
(2130)
,(103)
,(10)
,(1)
Select SomeCol
,TimeValue = format(SomeCol,'00:00')
From @YourTable
返回
SomeCol TimeValue
2130 21:30
103 01:03
10 00:10
1 00:01
编辑-请求2008年编辑
Declare @YourTable table (SomeCol int)
Insert into @YourTable values
(2130)
,(103)
,(10)
,(1)
Select SomeCol
,TimeValue = stuff(right('0000' + left(SomeCol, 4),4), 3, 0, ':')
From @YourTable
答案 1 :(得分:0)
您可以使用列值的长度和case语句尝试以下操作。
Declare @YourTable table (SomeCol int)
Insert into @YourTable values
(2130)
,(103)
,(10)
,(1)
Select
case LEN(SomeCol)
when 4 then SUBSTRING('2130', 1, 2) + ':' + SUBSTRING('2130', 3, 2)
when 3 then '0' + SUBSTRING('103', 1, 1) + ':' + SUBSTRING('103', 2, 2)
when 2 then '00:' + CONVERT(Varchar(5), SomeCol)
else '00:0' + CONVERT(Varchar(5), SomeCol)
end as TimeValue
from @YourTable
答案 2 :(得分:0)
雅各,你好,
请检查此解决方案是否适合您:
Declare @YourTable table (SomeCol int)
Insert into @YourTable values
(2130)
,(103)
,(10)
,(1)
--Select SomeCol,TimeValue = format(SomeCol,'00:00'), SQL_VARIANT_PROPERTY (format(SomeCol,'00:00'),'BaseType')
--From @YourTable
SELECT CONVERT(TIME(0),TIMEFROMPARTS(ROUND(SomeCol/100,0), SomeCol%100,0,0,0))
FROM @YourTable
抱歉,我在评论中注意到了新信息。似乎您使用SQL Server 2008R2和TIMEFROMPARTS在SQL Server2008r2上不起作用(仅从2012年开始)...我将在一秒钟内编辑答案
注意!我强烈建议您重新考虑您的数据库设计。请阅读我上面写的评论以获取更多信息
更新:
-- For old servers please check if one of these this fit you
SELECT --RIGHT('00' + CONVERT(VARCHAR(2),ROUND(SomeCol/100,0)),2),RIGHT('00' + CONVERT(VARCHAR(2),SomeCol%100),2),
CONVERT(TIME(0),RIGHT('00' + CONVERT(VARCHAR(2),ROUND(SomeCol/100,0)),2) + ':' + RIGHT('00' + CONVERT(VARCHAR(2),SomeCol%100),2))
FROM @YourTable