将Varchar列转换为日期时间格式 - SQL Server

9

我有一张从CSV文件导入的数据表,如下所示:

FirstTimeTaken      LatestTimeTaken     Market                  Outcome         Odds    NumberOfBets    VolumeMatched   InPlay
03/08/2013 15:30:14 03/08/2013 15:32:28 Over/Under 3.5 Goals    Over 3.5 Goals  5       10              118             1
03/08/2013 14:26:40 03/08/2013 14:29:43 Correct Score           0 - 0           7       12              279             1
03/08/2013 15:15:34 03/08/2013 15:27:39 Match Odds              Barnsley        110     7               9               1
28/07/2013 16:57:26 29/07/2013 21:35:55 Match Odds              Barnsley        3       9               35              0

因为我在尝试将数据导入为日期时间类型时出现错误,所以不得不以Varchar格式导入前两列。现在我已经将这些数据存储于表格中,需要将列的格式从Varchar转换为Datetime。我尝试了以下方法:

ALTER TABLE #CSVTest_Data
ALTER COLUMN FirstTimeTaken DATETIME
ALTER TABLE #CSVTest_Data
ALTER COLUMN LatestTimeTaken DATETIME

这导致错误:'将varchar数据类型转换为datetime数据类型时导致超出范围的值'。 我知道删除最后一行数据可以解决问题,因此我怀疑系统认为日期格式是MM/DD/YYYY,而实际上它是DD/MM/YYYY。 以下查询正常工作:

SELECT convert(VARCHAR(50),FirstTimeTaken,105) from #CSVTest_Data 
SELECT convert(VARCHAR(50),LatestTimeTaken,105) from #CSVTest_Data

但这并不会将列格式转换为日期时间格式。我希望能得到一些关于如何进行此操作的帮助。谢谢。

你正在使用什么方法来导入它们? - Zane
1
一个简单的 Cast(FirstTimeTaken as datetime) 应该就可以解决问题,如果所有字段的格式都像我们看到的那样。 - Dave Johnson
@DaveJohnson:我认为这个不起作用:SELECT CAST('28/07/2013 16:57:26' AS DATETIME)。至少在OP的环境中不起作用。 - Dave Mason
@DMason Jonas的回答现在对我来说更有意义了。不确定我的阅读理解能力出了什么问题.... - Dave Johnson
2个回答

4
尝试使用SET DATEFORMAT
SET DATEFORMAT dmy

我在我的ALTER COLUMN命令之前添加了你的代码行,它完美地运行了。甚至在第一次运行后,我将你的代码行注释掉,一切仍然正常工作。那段代码是否永久修改了我的设置? - Steve W
是的,完成后您可能希望运行 SET DATEFORMAT mdy 进行重置。 - The Jonas Persson
我在英国,所以我希望它永久地设置为DMY。谢谢。 - Steve W
2
我发现,在注销并重新登录后,DATEFORMAT丢失了,需要重新设置。永久修复的技巧是选择对象资源管理器中的Security-->Logins。然后找到用户,右键单击属性。在底部,您会看到默认语言。将其更改为英式英语即可永久修复这个问题。 - Steve W

2
您可以按照以下方式从您的 #Temp 表中选择数据:
SELECT 
    CONVERT(DATETIME, FirstTimeTaken, 103 ),
    CONVERT(DATETIME, LatestTimeTaken, 103)
FROM #CSVTest_Data

这将返回DATETIME数据类型的字段。从那里开始,您可以根据需要进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接