我使用BCP将数据从excel导入数据库。这导致excel中的日期显示为数据库中的数字。但是,数据库中已经有一些记录,格式为dd / mm / yyyy和dd / mm / yyyy hh:mm:ss格式。我的示例数据如下:
+---------------------+
| PcptClassDate |
+---------------------+
| 01/04/2018 00:00:00 |
| 02/04/2018 00:00:00 |
| 07/04/2018 00:00:00 |
| 28/09/2018 |
| 29/09/2018 |
| 30/03/2018 00:00:00 |
| 30/08/2018 |
| 31/03/2018 00:00:00 |
| 31/08/2018 |
| 43227 |
| 43232 |
| 43233 |
| 43239 |
+---------------------+
我通过将代码转换如下来满足代码中的数字日期:
DateTime.FromOADate(pcptClassDate)
因此,我现在想将该列中的所有日期转换为标准的Excel(数字)格式。是否有可以用于执行此操作的查询,还是需要为此编写代码?我的数据库版本是“ Microsoft SQL Azure(RTM)-12.0.2000.8 Apr 3 2019 13:27:00”
答案 0 :(得分:2)
这似乎是一件很愚蠢的事情,但是,如果您确实希望使用Excel的编号将所有日期显示为数值,则可以执行以下操作:
SELECT PcptClassDate,
CASE WHEN TRY_CONVERT(int,PcptClassDate) IS NOT NULL THEN PcptClassDate
ELSE DATEDIFF(DAY,'19000101',TRY_CONVERT(date,PcptClassDate,103)) + 2
END AS ExcelDateNum
FROM (VALUES ('01/04/2018 00:00:00'),
('02/04/2018 00:00:00'),
('07/04/2018 00:00:00'),
('28/09/2018'),
('29/09/2018'),
('30/03/2018 00:00:00'),
('30/08/2018'),
('31/03/2018 00:00:00'),
('31/08/2018'),
('43227'),
('43232'),
('43233'),
('43239'))V(PcptClassDate);
像我在评论中说的那样,这似乎是一个非常糟糕的主意;因为“日期” 43371
对大多数人来说毫无意义。