SQL将存储为varchar的日期转换为Excel(数字)格式

时间:2019-04-24 13:40:54

标签: sql-server

我使用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”

1 个答案:

答案 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对大多数人来说毫无意义。