如何将varchar转换为时间hh:mm

时间:2019-02-14 00:30:00

标签: sql-server tsql sql-server-2008-r2 type-conversion

我有代表军事时代的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格式?

3 个答案:

答案 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