0

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

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

但是,我收到此错误:

条件表达式中的数据类型不匹配

所以我想我已经接近了。我尝试了几种不同的格式,也许还有 DateValue,但老实说我不记得了。我查看了stackoverflow内外的其他帖子,但无济于事。

4

3 回答 3

2

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

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

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

如果返回您想要的,您可以避免在尝试将字符串转换为实际日期时遇到的数据类型错误。此外,使用列上的索引[Date],查询将执行得更快。

[Date]请注意,如果您的某些值不是YY.MM.DD格式,例如"12.1.13",则此方法不适合。

于 2013-08-14T14:51:23.057 回答
1

用于Regex.Replace日期格式并Regex.Split为年份添加 2 位数字。

于 2013-08-14T09:25:58.043 回答
0

不确定我实际上是如何最终解决这个问题的,但是如果没有记错的话,我实际上是通过在访问中自然地打开数据库并按姓氏列按字母顺序排序,然后手动或通过选择语句按日期列排序来手动对数据库进行排序的。

于 2014-01-11T08:14:01.330 回答