我正在从exisitng表A创建一个表B.在表A中,我有一个ValDate列,它是varchar并包含Date。当我尝试创建表B时,我在查询中使用了一个函数,如下所示,我得到转换错误。表A也包含空值。 MS Access:
((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 Server:
((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')))
我尝试使用转换,格式和转换等几种方法转换日期,但最终得到的错误如下所示。
Msg 8116, Level 16, State 1, Line 1
Argument data type date is invalid for argument 1 of isdate function.
我真的很感激有人告诉我这里缺少什么。
答案 0 :(得分:1)
由于您在字符串字段中有日期数据,因此很可能您的某些值对您的预期日期格式无效。
复制sql server表中的数据,然后检查并验证字符串字段的内容。
查看函数try_convert,在检查包含日期值的字符串字段的内容时可能会有所帮助。
当排除不良数据时,您可以再次申请您的公式(希望)不同的结果 更好的解决方案是创建一个具有适当数据类型的单独字段,以存储从字符串字段转换的日期值,并将您的逻辑应用于该字段。