将Varchar列转换为Datetime格式 - SQL Server

Ste*_*e W 9 sql sql-server datetime

我有一个从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
Run Code Online (Sandbox Code Playgroud)

我不得不以varchar格式导入前两列,因为我在尝试导入为datetime时遇到错误.现在我有一个表中的数据,我需要将列格式从Varchar转换为Datetime.我试过了:

ALTER TABLE #CSVTest_Data
ALTER COLUMN FirstTimeTaken DATETIME
ALTER TABLE #CSVTest_Data
ALTER COLUMN LatestTimeTaken DATETIME
Run Code Online (Sandbox Code Playgroud)

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

SELECT convert(VARCHAR(50),FirstTimeTaken,105) from #CSVTest_Data 
SELECT convert(VARCHAR(50),LatestTimeTaken,105) from #CSVTest_Data
Run Code Online (Sandbox Code Playgroud)

但是这不会将列格式转换为datetime.我将不胜感激如何做到这一点.谢谢.

The*_*son 4

尝试使用SET DATEFORMAT.

SET DATEFORMAT dmy
Run Code Online (Sandbox Code Playgroud)

  • 我发现注销并重新登录后,DATEFORMAT 丢失并且需要重置。永久解决此问题的技巧是在对象资源管理器中选择“安全”-->“登录”。然后找到用户并右键单击属性。在底部您将看到默认语言。将其更改为英式英语给了我一个永久的解决方案。 (2认同)