我需要从csv文件将数据导入访问数据库。我遇到的问题是访问会弄乱日期。
csv文件中的日期格式属于" 29-SEP-17"的行。当导入它以进行访问时,它将其转换为2029/09/17 - 基本上混合了日期的日期和年份部分。
我可以通过在导入文件并将文件中的日期字段更改为短日期之前转到excel来解决这个问题,但我宁愿修改此AFTER导入访问权限,使用SQL查询对表中的所有日期字段进行访问。谢谢你的帮助。
答案 0 :(得分:1)
看起来提供的其余答案是针对SQL Server而不是MS Access。您最好的选择是编写自己的日期分析函数以获得最大的控制权并以最有意义的方式使用它(如果您使用VBA解析csv,更新查询等)。
这也可以在MS Access查询中使用。以下是现场日期格式更新的更新示例:
UPDATE [MyTable] SET [MyTable].[MyDateToConv] = MyDateParse([MyTable].[MyDateToConv])
Public Sub TestParse()
Debug.Print MyDateParse("29-SEP-17") '9/29/2017
End Sub
Public Function MyDateParse(val As Variant) As Variant
Dim dPart As Variant
Dim mVal As Long
If IsNull(val) Then
MyDateParse = Null
Exit Function
End If
dPart = Split(val, "-")
If UBound(dPart) <> 2 Then
'value isn't of format ##-XXX-## handle how you please
End If
Select Case Trim(UCase(dPart(1))) 'select case based on the month
Case "JAN"
mVal = 1
Case "FEB"
mVal = 2
Case "MAR"
mVal = 3
Case "APR"
mVal = 4
Case "MAY"
mVal = 5
Case "JUN"
mVal = 6
Case "JUL"
mVal = 7
Case "AUG"
mVal = 8
Case "SEP"
mVal = 9
Case "OCT"
mVal = 10
Case "NOV"
mVal = 11
Case "DEC"
mVal = 12
Case Else
'however you want to handle this error
End Select
MyDateParse = DateSerial(dPart(2), mVal, dPart(0))
End Function
答案 1 :(得分:0)
从29-SEP-17
SELECT TO_DATE( (SUBSTR('29-SEP-17',1,7) || '20' || SUBSTR('29-SEP-17',8,2))
,'dd-MON-yyyy') FROM DUAL;
将添加&#39; 20&#39;在&#39; 17&#39;前面制作&#39; 2017&#39;之后将字符串转换为DATE类型。
2017-09-29 00:00:00(或者系统的默认日期格式是)。 或者您也可以像这样使用CONCAT:
SELECT TO_DATE( CONCAT (SUBSTR(yourDate,1,7), '20', SUBSTR(yourDate,8,2)) )
FROM yourTable;
答案 2 :(得分:0)
使用导入向导导入数据。
在此处,单击高级并将日期序列指定为 DMY ,并从 Short更改字段的数据类型文本到日期/时间。
现在您可以立即导入数据。