我将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中完成相同的工作?
答案 0 :(得分:3)
简短的回答是,这适用于大多数日期。
select dateadd(day, 43613, '1899-12-30')
答案 1 :(得分:0)
Excel“序列”日期是自1900-01-01
起的天数(其中1
是1900-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