在我的数据库中,我的月份名称为1月,2月,3月就是这样。
我代表字段名称是文本。当我按月按字段月份执行选择查询时,它将提供输出为2月,1月那样。
我知道FORMAT或db字段表示很清楚。虽然我是ms访问的新手,所以我不知道正确的格式。请帮我。
答案 0 :(得分:1)
您必须在为您转换值的模块中创建自己的自定义函数。
像
这样的东西Public Function StrToMonth(strIn As String) As Integer
Dim arrMonth(12) As Variant
Dim i As Integer
arrMonth(0) = "January"
arrMonth(1) = "February"
arrMonth(2) = "March"
arrMonth(3) = "April"
arrMonth(4) = "May"
arrMonth(5) = "June"
arrMonth(6) = "July"
arrMonth(7) = "August"
arrMonth(8) = "September"
arrMonth(9) = "October"
arrMonth(10) = "November"
arrMonth(11) = "December"
For i = 0 To UBound(arrMonth) - 1
If strIn = arrMonth(i) Then
StrToMonth = i + 1
Exit Function
End If
Next i
End Function
然后你可以在你的查询中使用它,比如
SELECT Table1.MonthVal
FROM Table1
ORDER BY StrToMonth([MonthVal]);
答案 1 :(得分:0)
在表中添加一个额外的列,其中月份名称具有月份编号,或更好,不将月份存储为字符串,而是将它们存储为日期,例如2010年8月1日,这将使这个问题更容易解决。
答案 2 :(得分:0)
将月份存储为整数,因为当前使用alpabetic排序返回行(数据库应该如何知道这些字符串有几个月?):4月,8月,2月,1月,3月......
答案 3 :(得分:0)
您可以将月份转换为日期以进行排序:
SELECT MonthName
FROM SomeTable
ORDER BY CDate("1/" & [MonthName] & "/2010");
答案 4 :(得分:0)
如果您认为将月份存储为实际日期是不合适的(当然可能是 - 我并不批评该决定),您希望通过以最有效的格式存储数据来最大限度地提高性能
这很可能将月份存储为整数。
出于显示目的,例如在报告中或在表单上,您可以使用格式显示月份名称。这有点棘手,因为没有直接转换(其中“MonthField”指的是您存储月份整数的字段):
Format(DateSerial(Year(Date()), MonthField, 1), "mmmm")
另一种方法是使用一个表将月份整数映射到月份名称,但是这会添加一个联接,如果该字段可以为空,则必须有一个外部联接,这样会更加昂贵性能明显优于内部联接。
请记住,您只在表示层中使用Format()语句,即作为表单或报表上控件的控件源。在表单上,您可能会为此目的使用2列组合框,因此用户将看到月份名称,但存储的值实际上是月份整数。在这种情况下,一个表可能有意义,但我不确定它只比输入一个值列表有任何真正的优势 - 它不是像易失性数据,即可能需要编辑的数据(这是您使用表格代替价值表的主要原因)!
编辑:
正如@HansUp指出的那样,VBA中有一个MonthName()函数(我不知道它存在!),所以这使得上述所有方法都比它需要的更复杂 - 你可以在表示层,不需要表或复杂的Format()语句。