MS Access SQL 语句中的迄今为止的字符串给出类型不匹配错误
Posted
技术标签:
【中文标题】MS Access SQL 语句中的迄今为止的字符串给出类型不匹配错误【英文标题】:String to date in MS Access SQL statement gives type mismatch error 【发布时间】:2013-08-14 09:06:14 【问题描述】:目前正在使用 C# 将数据从 Microsoft Access 数据库迁移到 Microsoft SQL Server 数据库。我正在尝试创建一个查询以从 Access 数据库中提取数据并按两列排序:Surname
和 Date
。挑战在于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,但老实说我不记得了。我查看了 *** 内外的其他帖子,但无济于事。
【问题讨论】:
希望对您有所帮助***.com/questions/17361338/… 【参考方案1】:你说你的日期是 YY.MM.DD 格式的字符串。如果这对于所有存储的[Date]
值都是正确的......这意味着所有行的Len([Date]) = 8
......无论您将它们作为文本排序还是将它们转换为日期/时间值,这些值都将以相同的顺序排序。
所以我会建议这个查询...
SELECT *
FROM [Contacts 2012]
ORDER BY Surname, [Date];
如果返回您想要的结果,您可以避免在尝试将字符串转换为实际日期时遇到的数据类型错误。此外,使用[Date]
列上的索引,查询的执行速度将显着加快。
请注意,如果您的某些 [Date]
值 not 采用 YY.MM.DD 格式,例如 "12.1.13",则此方法不适用。
【讨论】:
这几乎可以工作。我唯一的问题是姓氏是空白的。然后它首先列出三月到十二月,然后是一月到三月,即 12.03.## 到 12.12.##;然后 12.01.## 到 12.03.##. 对不起,我不明白。请编辑您的问题以包含具有代表性的行样本,然后向我们展示该样本在排序后的外观。【参考方案2】:使用Regex.Replace
表示日期格式,使用Regex.Split
将2 位数字添加到年份。
【讨论】:
【参考方案3】:不确定我最终是如何解决这个问题的,但如果没有记错的话,我实际上是通过在访问中自然地打开数据库并按姓氏列按字母顺序排序,然后手动或通过选择语句按日期列排序来手动对数据库进行排序。
【讨论】:
以上是关于MS Access SQL 语句中的迄今为止的字符串给出类型不匹配错误的主要内容,如果未能解决你的问题,请参考以下文章
偶尔在 MS Access 中工作的简单 SQL 更新语句?