在MS access select查询中使用DatePart进行数据转换

在MS access select查询中使用DatePart进行数据转换,select,ms-access-2007,insert-into,Select,Ms Access 2007,Insert Into,我试图在MS Access select查询中使用DatePart从最初以字符串形式显示的日期中提取月份和年份(作为数字) YYYY-MM-DD HH:NN:SS.0000000 其他人编写的初始代码表示: DatePart("m", date) DatePart("yyyy", date) 但这导致了一个数据类型,即查询运行时条件不匹配错误,因此我尝试使用Cdate将字符串转换为日期类型 DatePart("m", Cdate(date)) DatePart("yyyy", Cdate(da

我试图在MS Access select查询中使用DatePart从最初以字符串形式显示的日期中提取月份和年份(作为数字)

YYYY-MM-DD HH:NN:SS.0000000

其他人编写的初始代码表示:

DatePart("m", date)
DatePart("yyyy", date)
但这导致了一个数据类型,即查询运行时条件不匹配错误,因此我尝试使用Cdate将字符串转换为日期类型

DatePart("m", Cdate(date))
DatePart("yyyy", Cdate(date))
然而,这并没有解决问题。我想知道我的初始日期字符串是否不是Cdate可以转换的格式,或者是否有更简单的方法从日期字符串(如我的)中提取部分数字日期


如果这个问题不完整,我准备进一步详细说明情况,但我不想超过我自己。

你可以说,去掉这些多余的零是个问题

CDate(Mid(sdate, 1, InStr(sdate, ".") - 1))
然后

但是,您可能会发现只参考字符串的适当部分更方便:

aYr = Left(sdate,4)
aMnth = Mid(sdate,6,2)

分数秒阻止CDate接受字符串是正确的。你可以去掉分数秒。但是,由于您最终想要的是年和月,因此可以忽略所有时间组件,只使用日期部分

查看此即时窗口会话是否提供了有用的内容

MyString=FormatNow,yyyy-mm-dd hh:nn:ss&.0000000 ? MyString 2013-02-14 23:38:09.0000000 '如果日期格式始终为yyyy mm dd, '给CDate前10个字符 ? CDateLeftMyString,10 2/14/2013 “年 ? DatePartyyyy,CDateLeftMyString,10 2013 ”“或者 ? YearLeftMyString,10 2013 ”“一个月 ? DatePartm,CDateLeftMyString,10 2. ”“或者 ? MonthDateLeftMyString,10 2. '如果日期格式可能略有变化,例如yyyy-m-d, “在第一个空格前给CDate所有内容 ? CDateLeftMyString,InStrMyString,Chr32-1 2/14/2013 ? 年份日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期日期 2013 ? MonthDateLeftMyString,InStrMyString,Chr32-1 2. 你没有提到在你得到年份和日期之后你会如何处理它们。如果要将它们作为字符串连接在一起,可以使用格式

? FormatLeftMyString,10,yyyymm 201302
对不起,忘记回复了。。。这确实消除了我遇到的类型不匹配错误。非常感谢。谢谢你的回复,这也是有用的信息。基本上,问题已经解决了:DatePart需要date类型的参数,而CDate需要一个不带尾随小数秒部分的字符串参数。那么,您是说从字符串中提取日期值时,您更喜欢CDateMidYourString,1,InstrySourString,。-1比10?3个函数而不是2个?不,在这种情况下,向左调用更有效,我同意。但是,一般来说,省略可变数量的分数秒的概念可能更有用。他回答得很快,这对我也有很大帮助:
aYr = Left(sdate,4)
aMnth = Mid(sdate,6,2)