有一张5年的汇率表。左列由日期组成。导入是从格式文件完成的csv,这些日期在NVARCHAR. 您需要将它们转换为格式DATETIME(或DATE)。我只能将日期从该月的 1 日转换为 12 日,其余的仍然存在。问题可能出在数据表示格式mm.dd.yyyy或dd.mm.yyyy. 但是我在管理器中更改了这些格式 - 结果是一样的。我用Dbeaver,SQL-server-linux上Docker。我还能在哪里更改系统中的演示格式,使其与表格中的格式匹配。在日期表中为dd.mm.yyyy. 我正在使用以下脚本转换NVARCHAR为DATETIME
UPDATE Rates SET Col1 = CASE WHEN ISDATE(Col1) = 1
THEN
CONVERT(nvarchar(255),
CAST(Col1 AS datetime), 104)
END WHERE ISDATE(Col1) = 1;
问题出在您的 ISDATE(Col1) 检查中。它采用默认设置并尝试检查字符串是否为日期。因为 默认情况下,您的设置正好是 mm.dd.yyyy,然后超过 12 的日期不会被识别为日期。
主要建议是删除此检查,并在服务器版本允许的情况下使用更智能的 TRY_CONVERT 函数和您需要的参数。
如果版本不允许,请使用以下两种设置之一:
会将您的格式转换为 dd.mm.yyyy,
将默认语言设置为俄语,它的格式也为 dd.mm.yyyy。
在这种难以理解的情况下,可以不用写
CASE,而是用命令TRY_CONVERT:TRY_CONVERT(datetime, Col1, 104)如果不能转换,这个函数会返回NULL可以在链接中找到更多详细信息