select cast('01/05/2014' as date)
返回:2014-05-01
但我有一个带有日期的CSV文件(全部在五月份),用英文格式写成,与上面完全相同。事实上,我正在使用前10条记录,这些记录都有日期:01/05/2014
我的问题是,当我运行以下代码时,结果都是:
2014-01-05 00:00:00.000 | 2014-01-05 | 2014-01-05 | 2014-01-05 | 2014-01-05 | Jan 5 2014 12:00AM | 05/01/2014
这是代码:
SELECT top 10
sdispdate
,convert(date, sdispdate, 103)
,cast(sdispdate as date)
,convert(date, cast (sdispdate as date), 103)
,cast(convert(date, sdispdate, 103) as date)
,cast(sdispdate as varchar(50))
,convert(varchar(20), sdispdate, 103)
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\Import;HDR=Yes;FORMAT=Delimited(,)', 'SELECT * FROM [MyDataFile.csv]')
所以我的问题是我无法将已经过英国的日期转换为英国日期。我觉得我的问题必须与OPENROWSET有关 - 任何想法?
UPDATE :我刚刚在另一台SQL 2008R2服务器上运行相同的查询(与我的相同)并获得了正确的结果。两台服务器在运行DBCC USEROPTIONS
更新2 :我刚刚在我的计算机上运行SSMS作为域管理员并且它正常工作...... DBCC USEROPTIONS
在我和管理员之间是相同的。我也是一个系统管理员。我的机器都是澳大利亚人,没有其他区域设置。如果我作为自己或管理员连接到我的第一次更新中提到的我的其他服务器,它的工作原理。这只能意味着我的登录在此新服务器上只有一个唯一的设置。我还能检查什么?我已经在这个问题上待了4个多小时!!!
答案 0 :(得分:0)
Gordatron是对的,ACE在SQL得到它之前就把我绳之以法。这意味着我甚至无法制作数据SUBSTRING等。
我的解决方案是简单地将schema.ini添加到与导入文件相同的文件夹中。这些内容只是:
[MyDataFile.csv]
DateTimeFormat=dd-MMM-yyyy
就是这样。