将int转换为时间

时间:2015-12-02 08:52:44

标签: sql-server

我有一个表,日期和时间分别给出,时间以int格式给出。我必须以日期时间格式合并日期和时间列,如dd:mm:yyy hh:mm:ss.this合并值应插入" MergeDT"列是必需的输出。 我已经在MergeDT专栏中提到了输出。

ID | DATE_TAKEN            |    TIME |         MergeDT            |
----------------------------------------------------------------------
1  | 2005-08-01 00:00:00   |    702  |   2005-08-01 07:02:00      | 
----------------------------------------------------------------------
2  | 2005-08-01 00:00:00   |    702  |   2005-08-01 07:02:00      |
----------------------------------------------------------------------      
3  | 2005-08-01 00:00:00   |    702  |   2005-08-01 07:02:00      |
-----------------------------------------------------------------------
4  |  2003-01-22 00:00:00  |    1603 |   2003-01-22 16:03:00      |
-----------------------------------------------------------------------
5  |  2005-08-01 00:00:00   |   702  |   2005-08-01 07:02:00      |
-----------------------------------------------------------------------
6  |  2005-08-01 00:00:00   |   3    |     2005-08-01 00:03:00    |
-----------------------------------------------------------------------  
7  |  2005-08-01 00:00:00   |   504  |   2005-08-01 05:04:00      |
----------------------------------------------------------------------- 
8  |  2003-01-22 00:00:00   |   1646 |   2003-01-22 00:00:00      |
-----------------------------------------------------------------------

3 个答案:

答案 0 :(得分:2)

应该是这样的:

    const string FirstNamespaceUri = "firstdefaultnamespace";
    const string SecondNamespaceUri = "seconddefaultnamespace";
    XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
    ns.AddNamespace("ns1", FirstNamespaceUri);
    ns.AddNamespace("ns2", SecondNamespaceUri);

    XmlNode customizedNode = doc.CreateElement("CustomizedField", SecondNamespaceUri);
    XmlNode keyNode = doc.CreateElement("Key", SecondNamespaceUri);
    XmlNode dataNode = doc.CreateElement("DataType", SecondNamespaceUri);
    XmlNode valueNode = doc.CreateElement("Value", SecondNamespaceUri);
    keyNode.InnerText = "hi";
    dataNode.InnerText = "hello";
    valueNode.InnerText = "bye";
    customizedNode.AppendChild(keyNode);
    customizedNode.AppendChild(dataNode);
    customizedNode.AppendChild(valueNode);

    doc.DocumentElement.SelectSingleNode("ns1:Body/ns2:UniversalShipment/ns2:Shipment/ns2:CustomizedFieldCollection", ns).AppendChild(customizedNode);

Re:混淆数据表示。 SQL Server中的日期时间数据类型以紧凑的二进制表示形式存储数据。他们不存储任何格式信息。我不认为有人会对以下内容感到惊讶:

UPDATE UnnamedTable SET MergeDT = DATEADD(hour,  [time] / 100,
                                  DATEADD(minute,[time] % 100,DATE_TAKEN))

打印declare @t int set @t = 0x0D print @t 而不是13,然而人们似乎永远感到惊讶的是,相同的逻辑适用于日期时间类型 - 他们将数据存储在一个格式一致,而不是存储用于设置其值的字符串表示。

答案 1 :(得分:0)

将整数格式(通常为秒)的时间转换为sql server中的时间如下。

declare @t int
set @t = 110

select cast((@t / 60) as varchar(2)) + ':' + cast((@t % 60) as varchar(2))

答案 2 :(得分:0)

如果我理解了相关内容你需要这样的东西:

SELECT CONVERT( DATETime, SUBSTRING(DATE_TAKEN, 0, 10) + ' ' + select cast(([TIME] / 100) as varchar(2)) + ':' + cast(([TIME] % 100) as varchar(2)) + ':00')