我已经尝试了我能找到的所有内容(CAST
,CONVERT
,导入时进行转换,检查默认语言设置)但我找不到将我的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而没有“超出范围”错误。
答案 0 :(得分:3)
首先,始终包含转换的varchar长度。其次,您确实希望转换为DATETIME
,这是目标类型。
第三,您可以使用以下方式获取不可转换的值:
SELECT [first air date]
FROM mytable
WHERE TRY_CONVERT(DATETIME, [first air date], 121) IS NULL
然后,您可以弄清楚如何处理无法转换的值。