在插入日期时间SQL

时间:2019-05-29 17:46:07

标签: sql sql-server tsql date

我将Excel文件中的某些列插入到SQL表中。

我正在尝试选择日期列,但我得到了 “插入日期时间时从字符串转换日期和/或时间时转换失败”

我的查询是

Select 
CONVERT(datetime2, SS.OrderDate) Date_Created
--CAST(SS.OrderDate as datetime2) Date_Created
FROM Table SS (nolock)

这两条线都失败。

我的日期列如下:

43613
43612
43611

哪些excel可以格式化回(有人知道吗?这是什么格式?)

5/28/2019
5/27/2019
5/26/2019

如何在SQL中完成相同的工作?

3 个答案:

答案 0 :(得分:3)

简短的回答是,这适用于大多数日期。

select dateadd(day, 43613, '1899-12-30')

答案 1 :(得分:0)

Excel“序列”日期是自1900-01-01起的天数(其中11900-01-01,因此先减去1)

您可以像这样转换它:

SELECT
    CONVERT( date, DATEADD( day, SS.OrderDate - 1, '1900-01-01' ) ) AS OrderDate

答案 2 :(得分:0)

另一种选择是使用 float datetime 的隐式转换。注意负2.0

示例

Select AsInt       = convert(datetime,43613-2.0)
      ,WithDecimal = convert(datetime,43613.5-2.0)

返回

AsInt                    WithDecimal
2019-05-28 00:00:00.000  2019-05-28 12:00:00.000

现在,如果您的列是varchar,也许是这样的

示例

Declare @YourTable Table ([OrderDate] varchar(50))
Insert Into @YourTable Values 
('43613'),
('43612'),
('43611')

select AsDateTime = convert(datetime,0+[OrderDate]-2.0)
 From @YourTable

返回

AsDateTime
2019-05-28 00:00:00.000
2019-05-27 00:00:00.000
2019-05-26 00:00:00.000