从.csv导入dd.(m)m.yyyy
格式的日期字符串后,我似乎无法将它们转换为日期。
使用CONVERT (date, DATE_COLUMN, 104)
会导致错误:
从字符串转换日期和/或时间时转换失败。
但是,如果我尝试转换从列选择输出(CONVERT (date, '20.5.2018', 104)
)复制的值,则该代码对于列中的每个单个值都可以正常工作。
修剪字符串无效。我还尝试过手动重写源文件中的日期字符串,但结果是相同的。
总结(使用1个示例值):
select CONVERT(date, DATE_COLUMN, 104)
from dbo.table
返回:
从字符串转换日期和/或时间时转换失败。
select DATE_COLUMN
from dbo.table
返回:20.5.2018
select CONVERT(date,'20.5.2018', 104)
返回:'2018-5-20'
我希望SQL Server以相同的方式对待每个转换。尽管有一种解决方法(将字符串拆分为日期部分并将其组合为日期),但我不明白为什么转换首先会失败。任何帮助表示赞赏。
答案 0 :(得分:0)
使用try_convert()
查找问题值:
select DATE_COLUMN
from dbo.table
where try_convert(date, DATE_COLUMN, 104) is null and
DATE_COLUMN is not null;
答案 1 :(得分:0)
您的问题不可复制。以下测试:
CREATE TABLE dt (DATE_COLUMN varchar(10));
INSERT INTO dt VALUES ('20.5.2018');
SELECT CONVERT(date, DATE_COLUMN, 104)
FROM dt;
DROP TABLE dt;
返回2018-05-20
并且不会导致任何错误。
答案 2 :(得分:0)
问题是由回车符与字符串一起导入到每一行引起的。平面文件连接的行定界符设置为{LF},但是某些源平面文件使用了{CR} {LF}定界符,因此,{CR}字符已导入到列中。
由于我尝试过修剪值,但没有效果,所以我的结论是,“看不见”的字符都得到了照顾。老实说,我从未想过可以将回车符导入到列中。
由于我无法更改源文件,并且不确定如何为导入设置动态定界符,因此我通过以下方式删除了{CR}来解决了这个问题:
REPLACE(DATE_COLUMN,char(13),'')