所以我有一个查询,假设从两个表中获取数据。只要日期格式在english(us)语言环境下,它就可以正常工作。当它处于国际格式化时,查询在运行时会出错并失败。查询是
SELECT DISTINCT AlarmDet.Machine, AlarmDet.Job,
AlarmDet.Mode, AlarmDet.User, AlarmDet.JobStart,
AlarmDet.Object, AlarmDet.AlarmId, AlarmDet.AlarmStart,
AlarmDet.MachineFault, AlarmDet.OperFault,
AlarmDet.PiecesFed, Val(OperFault)+Val(MachineFault) AS AlarmStopTime,
(Mid(alarmdet.AlarmStart,5,7) & Right(alarmdet.AlarmStart,4) & Mid(alarmdet.AlarmStart,11,9)) AS AlarmTimeDate,
Mid(alarmdet.AlarmStart,12,2) AS AlarmHH,
Mid(alarmdet.AlarmStart,15,2) AS AlarmMM,
Mid(alarmdet.AlarmStart,18,2) AS AlarmSS,
CVDate((Mid([alarmdet].[AlarmStart],5,7) & Right([alarmdet].[AlarmStart],4))) AS AlarmDate, Alarms.ALARM_DESC
FROM AlarmDet INNER JOIN Alarms ON AlarmDet.AlarmId = Alarms.id;
查询中的公式正在执行警报启动(日期)并将其拆分为单独的段。
当我进入并尝试运行它时导致错误的查询部分是:
CVDate((Mid([alarmdet].[AlarmStart],5,7) & Right([alarmdet].[AlarmStart],4))) AS AlarmDate
我想知道的是,如果有一种方法可以将查询的格式转换为美国日期格式转换? 或者是否有更好的方法来构建查询的这一部分,以使其在国际格式下运行?
更新
花了一些时间并尝试了一些建议后,我想出了这个:
format(Mid([alarmdet].[AlarmStart],5,7) & right([alarmdet]![alarmstart], 4), "mm/dd/yyyy")
然而,我没有得到mm / dd / yyyy,而是得到了这个: MM-DD-YYYY。
为什么会这样想?
再次更新:
没关系,看起来,这与你的语言环境设置的位置有关。
非常感谢任何建议或帮助。
感谢。
答案 0 :(得分:1)
尝试在日期字段上使用ACCESS的Year()和Month()函数,而不是MID和Right函数来解析日期...我没有安装ACCESS,但它会是这样的:
CVDate(Str(month([alarmdet].[AlarmStart]))&
"/"&str(year([alarmdet].[AlarmStart]))) AS AlarmDate
您可能需要稍微调整一下,但这些功能应该正确提取日期信息......
答案 1 :(得分:1)
查看Format()函数是否允许您根据需要显示[AlarmStart]。以下是从立即窗口复制的一些示例表达式。
? Format(Date(), "yyyy/mm/dd")
2011/08/29
? Format(Date(), "mmm d, yyyy h:nn:ss ampm")
Aug 29, 2011 12:00:00 AM
编辑:这是我使用您为[AlarmStart]提供的示例文本值(“Tue Jan 18 10:10:57 2011”)在立即窗口中获得的内容。
? Format(Mid("Tue Jan 18 10:10:57 2011", 5, 7) & _
Right("Tue Jan 18 10:10:57 2011", 4), "mm/dd/yyyy")
01/18/2011