日期转换问题 MS 访问 SQL Server
Posted
技术标签:
【中文标题】日期转换问题 MS 访问 SQL Server【英文标题】:Date Conversion Issue MS Access to SQL Server 【发布时间】:2014-10-15 13:33:01 【问题描述】:我正在从现有表 A 创建表 B。在表 A 中,我有一列 ValDate,它是 varchar 并包含日期。当我尝试创建表 B 时,我在查询中使用了一个函数,如下所示,并且出现转换错误。表 A 也包含空值。 微软访问:
((DateDiff("d",Date(),format(Replace(Replace([Table A].ValDate,".","/"),"00/00/0000","00:00:00"),"dd/mm/yyyy")))>0)).
表在 MS Access 中,正在迁移到 SQL Server 2012。
SQL 服务器:
((DATEDIFF(day,FORMAT( GETDATE(), 'dd-MM-yyyy', 'en-US' ),FORMAT( ValDate, 'dd-MM-yyyy', 'en-US' ))>0))
或
((DateDiff(day,GETDATE(),Format(Replace(Replace([TableA].[ValidFrom],'.','/'),'00/00/0000','00:00:00'),'dd/mm/yyyy')))
我尝试使用 Convert 、 Format 和 Cast 等几种方法转换日期,但最终出现如下错误。
Msg 8116, Level 16, State 1, Line 1
Argument data type date is invalid for argument 1 of isdate function.
非常感谢有人告诉我我在这里缺少什么。
【问题讨论】:
【参考方案1】:由于您在字符串字段中有日期数据,因此很可能您的某些值对您的预期日期格式无效。
复制sql server表中的数据,然后对字符串字段的内容进行检查和验证。
查看函数try_convert,它在检查包含日期值的字符串字段的内容时会很有帮助。
排除不良数据后,您可以再次应用您的公式(希望)得到不同的结果。 更好的解决方案是创建一个具有适当数据类型的单独字段来存储从字符串字段转换的日期值并将您的逻辑应用于该字段。
【讨论】:
感谢 Paolo 的快速回复,我确实尝试了“try_convert”功能。我还验证了 ValDate 列永远不会为空,有时是正确格式“00.00.0000”的不正确日期 try_convert 的结果是什么?它总是为源数据集中的每一行产生正确和预期的结果?一次应用公式的每个元素怎么样? 我知道我的列都没有被转换,我试过这个 select TRY_CONVERT(datetime, '[ValidDate') AS Result from Table B. 我不明白为什么? 您确定 Access 表中的列是文本吗?如果您使用 SSMA 将表迁移到 SQL Server,则 SSMA 将经常选择较新的日期/时间格式,但如果您使用标准 SQL 驱动程序(随 Windows 提供),则到 SQL Server 的 LINKED 表将显示 text/char 作为该列的数据类型可能是您不想要的。您是从 SQL Server 还是通过 Access 前端的链接表测试/尝试这些新查询?由于这个问题,您可能希望使用较新的本机 11 odbc 驱动程序将 Access 链接到 SQL Server(然后这些列将显示为日期) 表正在通过 SSMA 从 Access 迁移到 SQL Server。我已经用 dateformat 重新创建了表格来解决这个问题。以上是关于日期转换问题 MS 访问 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server、Excel 和 MS Access 中的日期差异
使用 java 和 sql INSERT Query 在 MS 访问中插入字符串类型变量和日期类型变量