MS Access SQL语句中的日期字符串给出了类型不匹配错误

时间:2013-08-14 09:06:15

标签: c# ms-access ms-access-2013 sqldatetime

目前正在使用C#从Microsoft Access数据库迁移到Microsoft SQL Server数据库。我正在尝试创建一个查询以从Access数据库中提取数据,并按两列排序:SurnameDate。挑战是Date是以下示例格式的字符串:12.01.13(即YY.MM.DD),它应该代表2012年1月13日。所以我尝试了以下查询访问:

SELECT * FROM [Contacts 2012]
  order by Surname, CDate(Format(Date, "0000-00-00"));

但是,我收到此错误:

  

标准表达式中的数据类型不匹配

所以我认为我越来越近了。我尝试了几种不同的格式,加上可能是DateValue,但说实话我记不起来了。我已经查看了stackoverflow内外的其他帖子,但无济于事。

3 个答案:

答案 0 :(得分:2)

您说您的日期是 YY.MM.DD 格式的字符串。如果这对于所有存储的[Date]值都是正确的...这意味着所有行都为Len([Date]) = 8 ...无论您是将它们排序为文本还是将它们转换为日期/,这些值都将以相同的顺序排序时间价值。

所以我会建议这个查询...

SELECT *
FROM [Contacts 2012]
ORDER BY Surname, [Date];

如果返回所需内容,则可以避免在尝试将字符串转换为实际日期时遇到的数据类型错误。此外,通过[Date]列上的索引,查询执行速度会明显加快。

请注意,如果 YY.MM.DD 格式的某些[Date],则此方法不适用,例如“12.1。 13"

答案 1 :(得分:1)

使用Regex.Replace作为日期格式,使用Regex.Split将2位数添加到年份。

答案 2 :(得分:0)

不确定我实际上是如何最终解决这个问题但是如果内存服务我实际上是通过在访问中自然打开数据库并按字母顺序按姓氏列排序然后手动或通过select语句按日期列排序来手动对数据库进行排序。 / p>