C#sql查询和带有无日期格式的数据表以获得差异

时间:2017-07-07 15:17:55

标签: c#

我使用SQL查询2列 - 第1列只有数字,第2列是日期。但是第1列的值也是日期,但没有“:”和空格(非日期格式)。

我需要数据表中的第3列,它给出了第1次和第2次之间的区别。

你能告诉我如何继续吗?我尝试手动添加“:”,我无法更改SQL数据库 - 只读取并输入到数据表中。

SqlDataAdapter test = new SqlDataAdapter(query, con2);
test.Fill(dt);
dt.Columns.Add("Real", typeof(int));
dt.Columns["Real"].SetOrdinal(5);
DataTable distinctTable = dt.DefaultView.ToTable( /*distinct*/ true);
dataGridView1.DataSource = distinctTable;
distinctTable.Columns["Real"].SetOrdinal(5);
this.dataGridView1.Columns["Column1"].Visible = false;
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

int a = 0;
foreach (DataRow d in distinctTable.Rows)
{ 
   try
   {
       DateTime da = DateTime.ParseExact(dataGridView1.Rows[a].Cells["Real"].Value.ToString(), "yyyy-dd-MM hh:mm", System.Globalization.CultureInfo.InvariantCulture);
       d["Real"] = da;
       ++a;
   }
   catch (Exception)
   {
       ++a;
       continue;
   }
}

示例表:

   Column1           Column2
_______________|____________________
20170707060713 | 2017-07-07 06:13:43
20170707061326 | 2017-07-07 06:21:16
20170707062059 | 2017-07-07 06:28:54
20170707062837 | 2017-07-07 06:36:22
20170707063605 | 2017-07-07 06:43:50
20170707064333 | 2017-07-07 06:51:08

1 个答案:

答案 0 :(得分:1)

以下SQL查询将numeric(bigint)列转换为SQL DateTime格式,并计算两个日期之间的差异:

DECLARE @Test table(num bigint, dte datetime);
INSERT INTO @Test(num, dte) VALUES(20170707060713, '2017-07-05 18:36:58')

SELECT num,
       dte,
      DATEDIFF(hour, dte, convert(DATETIME, substring(CAST(num AS NVARCHAR), 0, 9)
                        +' '+substring(CAST(num AS NVARCHAR), 9, 2)
                        +':'+substring(CAST(num AS NVARCHAR), 11, 2)
                        +':'+substring(CAST(num AS NVARCHAR), 13, 2))) AS dteFromNum
    from @Test;

SqlFiddle Demo