0

我有一种情况需要一些建议。没有代码,因为我想自己查找并弄清楚。这只是一个学术问题。

我每天都会得到一个平面文件,我必须将其加载到表格中,这是文件的一个片段:

Date-YYYMMDD  TIME
20091124|     01:19:00|...
20091124|     01:19:15|...

这两个字段是日期和时间。当我将此数据加载到数据库中时,结果如下:

Date-YYYMMDD  TIME
20091124      1899-12-30 01:19:00.000
20091124      1899-12-30 01:19:15.000

我有一个将数据与结果合并的视图:

datetime                   yearmonthday
2009-11-24 01:19:00.000    2009-11-24
2009-11-24 01:19:15.000    2009-11-24

我这样做是为了让需要这些数据的人不必胡乱处理应该是日期但不是日期的日期和文本字段。

问题是我不喜欢在视图中这样做。我宁愿把它正确地存储在原始表中。我在想,对于插入的每一行,我都会拦截该插入,进行合并,然后以正确的格式插入到表中。完成后,我可以放下视图。有没有最好的方法呢?像任何优秀的开发人员/管理员一样。我想尽量减少我的干预。我们有电脑来做这类工作。我不控制源文件,也无法对其进行任何更改。我在想一个插入触发器。有没有更好的办法?尽管这几个月来我在 TSQL 方面做了很多工作,但我仍然认为自己是了解好的 TSQL 和最有效的做事方式的初学者。

4

1 回答 1

2

我会说加载到临时表中。

CREATE TABLE dbo.StagingTable
(
  Col1 DATETIME,
  Col2 DATETIME
);

将您的数据加载到此表中。如果您的文件与您的问题中的文件一样简单,那么您应该能够使用BULK INSERT和删除大部分手动过程。然后在你的真实表中,有一DATETIME列。

INSERT dbo.RealTable(DateTimeColumn)
  SELECT DATEADD(SECOND, DATEDIFF(SECOND, 0, Col2), Col1)
  FROM dbo.StagingTable;

-- if successful:
TRUNCATE TABLE dbo.StagingTable;

一个更简单的方法是——如果你打开文件并修改它们——是改变这个:

Date-YYYMMDD  TIME
20091124|     01:19:00|...
20091124|     01:19:15|...

对此:

Date-YYYMMDD     |...
20091124 01:19:00|...
20091124 01:19:15|...
于 2013-07-29T17:41:55.100 回答