CONVERT不适用于VARCHAR到DATETIME

时间:2017-05-23 11:25:40

标签: sql sql-server tsql

我已经尝试了我能找到的所有内容(CASTCONVERT,导入时进行转换,检查默认语言设置)但我找不到将我的VARCHAR值转换为有效值的工作解决方案DATETIME。我想将此字段的转换插入到新表中,其中该列设置为DATETIME

当我跑步时:

SELECT CONVERT(VARCHAR, [first air date], 121) 
FROM mytable

结果返回正常且无错误。但是,当我跑:

INSERT INTO newtable
    SELECT ID, column1, column2, 
           CONVERT(VARCHAR, [first air date], 121) 
    FROM mytable

我收到此错误:

  

Msg 242,Level 16,State 3,Line 1
  将varchar数据类型转换为日期时间数据类型会导致超出范围的值。声明已经终止。

为什么我会得到结果(如在第一个查询中),但它不会将它们插入到另一个表中?

数据看起来像这样:'2004-02-23 00:00:00.000'(我知道破折号不是最佳做法,但由于此格式已由其他同事确定,因此我没有余地。)

我正在通过.csv导入数据,此列在Excel中设置为日期格式。

校正 我现在意识到它应该是CONVERT(DATETIME,[第一次播出日期],121)。但是,这并没有解决手头的实际问题,即从VARCHAR转换为DATETIME而没有“超出范围”错误。

1 个答案:

答案 0 :(得分:3)

首先,始终包含转换的varchar长度。其次,您确实希望转换为DATETIME,这是目标类型。

第三,您可以使用以下方式获取不可转换的值:

SELECT [first air date]
FROM mytable
WHERE TRY_CONVERT(DATETIME, [first air date], 121) IS NULL

然后,您可以弄清楚如何处理无法转换的值。