SELECT *, Left([Test],InStr([Test]," ")) AS Mo,
Val(Mid([Test],InStr([Test]," "))) AS Dy,
Mid([Test],InStrRev([Test],",")-5,5) AS Yr,
Mid(Test,InStrRev(Test,",")+1,9) AS Tm,
CDate([Mo] & [Dy] & [Yr] & [Tm]) AS NewDate
FROM Table;
可能会发现调用自定义vba函数更方便。
Function ConvDate(strDte As String) As Date
Dim Mo As String, Dy As String, Yr As String, Tm As String
Mo = Left(strDte, InStr(strDte, " "))
Dy = Val(Mid(strDte, InStr(strDte, " ")))
Yr = Mid(strDte, InStrRev(strDte, ",") - 5, 5)
Tm = Mid(strDte, InStrRev(strDte, ",") + 1, 9)
ConvDate = CDate(Mo & Dy & Yr & Tm)
End Function
2条答案
按热度按时间6l7fqoea1#
由于序号、逗号和小数,access无法将该字符串识别为有效日期。必须使用字符串操作函数重新配置为可识别的日期/时间值。
如果字符串总是有“th”、逗号和1到3个小数位,请考虑:
CDate(Replace(Replace(Left([field], InStrRev([field], ".") - 1), "th", ""), ",", ""))
如果需要删除时间组件,可以使用datevalue()。但是,我假设会有没有小数的值以及不同的序数,这个表达式将失败。以下假设hh:mm:ss始终为8个字符:
可能会发现调用自定义vba函数更方便。
如果要删除时间部分,请不要连接提取的组件或对返回的日期/时间值使用datevalue()。
在字符串操作中,结构的一致性是至关重要的。变化越多,代码就越复杂。
d5vmydt92#
可以使用datevalue()函数。
因此: