Access表达式 窗体、报表和数据访问页中使用的表达式示例
处理和计算日期的示例
下表列出了可在窗体、报表和数据访问页上的计算控件中使用的表达式示例。
表达式 说明 =Date() 使用 Date 函数显示当前日期,显示时用 mm-dd-yyyy 形式,其中 mm 是月份(1 到 12),dd 是日期(1 到 31),yyyy 则是年份(1980 到 2099)。 =Format(Now(), "ww") 使用 Format 函数显示当前日期在该年中所处的星期号,其中 ww 为 1 到 53。 =DatePart("yyyy", [订购日期]) 使用 DatePart 函数显示“订购日期”字段值的四位年份值。 =DateAdd("y", -10, [应付日期]) 使用 DateAdd 函数显示“应付日期”字段值前 10 天的日期值。 =DateDiff("d", [订购日期], [发货日期]) 使用 DateDiff 函数显示“订购日期”和“发货日期”字段值之间相差的天数。
注意 在计算控件的“控件来源”属性中,以 = 运算符开头。在数据访问页上,可以省略 = 运算符,而键入一个别名;例如,键入 WeekNumber: Format(Now(), "ww")。在窗体或报表中设置计算控件的“名称”属性或在数据访问页中设置计算控件的 ID 属性时,应确保使用唯一的名称。不要使用表达式中使用的控件的名称或 ID。 在窗体或报表上的表达式中,可使用控件的名称或基础记录源中的字段名。在数据访问页上的表达式中,只能使用页的数据定义中的字段的名称。 下表列出了可以在窗体、报表和数据访问页上的计算控件中使用的表达式示例。
表达式 说明 ="无" 显示“无”。 =[名字]&" "&[姓氏] 显示“姓氏”字段和“名字”字段的值,两者之间以空格隔开。 =Left([产品名称], 1) 使用 Left 函数显示“产品名称”字段值的第一个字符。 =Right([资产代码], 2) 使用 Right 函数显示“资产代码”字段值的最后两个字符。 =Trim([地址]) 使用 Trim 函数显示“地址”字段的值,并且删除首尾的空格。 =IIf(IsNull([地区]),[城市]&" "& [邮政编码],[城市]&" "&[地区]&" "& [邮政编码]) 如果“地区”值为 Null,则使用 IIf 函数显示“城市”和“邮政编码”字段的值,否则显示“城市”、“地区”和“邮政编码”字段的值,中间以空格分隔。 注意 在计算控件的“控件来源”属性中,以 = 运算符开头。在数据访问页上,可以省略 = 运算符,而键入一个别名;例如,键入“FullName: [名字]&" "& [姓氏]”。 在窗体或报表中设置计算控件的“名称”属性或在数据访问页中设置计算控件的 ID 属性时,应确保使用唯一的名称。不要使用表达式中使用的控件名称或 ID。 在窗体或报表的表达式中,可使用控件的名称或基记录源的字段名。在数据访问页的表达式中,只能使用在页的数据定义中的字段的名称。处理数学运算的示例
下表列出了可在窗体、报表和数据访问页上的计算控件中使用的表达式示例。
表达式 说明 = [小计] + [运费] “小计”和“运费”字段值的总和。 =[到货日期]-[发货日期] “到货日期”和“发货日期”字段值的差。 =[价格] * 1.06 “价格”字段值的 1.06 倍(“价格”值增加 6%)。 =[数量] * [价格] “数量”和“价格”字段值的乘积。 =[雇员总计]/[国家总计] “雇员总计”和“国家总计”字段值的比值。 注意 在计算控件的“控件来源”属性中,表达式前面要加 = 运算符。在数据访问页中,可省略 =,而键入别名。例如,键入“ExtendedPrice: [数量] * [价格]”。 在窗体或报表中设置计算控件的“名称”属性或在数据访问页中设置计算控件的 ID 属性时,应确保使用唯一的名称。不要使用表达式中使用的控件名称或 ID。 在窗体或报表的表达式中,可使用控件的名称或基记录源中的字段名。在数据访问页的表达式中,只能使用页的数据定义中的字段的名称。 如果在表达式中使用算术运算符(+、-、*、/),且表达式中某一控件的值为 Null,则整个表达式的结果将变成 Null。在窗体或报表上,如果表达式中某个控件的一些记录值可能为 Null,可使用 Nz 函数将 Null 值转化为 0,例如: =Msodsc.Nz([小计]) + Msodsc.Nz([运费])条件表达式示例
下表列出了可在窗体、报表和数据访问页上的计算控件中使用的表达式示例。
表达式 说明 =IIf([确认] = "是","订单已确认","订单没有确认") 如果“确认”字段的值为“是”则显示“订单已确认”消息,否则显示“订单没有确认”。 =IIf(IsNull([国家])," ",[国家]) 如果“国家”字段值为 Null 则显示空字符串,否则显示“国家”字段的值。 =IIf(IsNull([地区]),[城市]&" "& [邮政编码], [城市]&" "&[地区]&" " &[邮政编码]) 如果“地区”字段值为 Null,则显示“邮政编码”和“城市”字段的值,否则显示“城市”、“地区”和“邮政编码”字段的值。 =IIf(IsNull([到货日期] - [发货日期]),"检查相差日期",[到货日期] - [发货日期]) 如果“到货日期”减去“发货日期”的值为 Null,则显示“检查相差日期”消息,否则显示“到货日期”和“发货日期”字段值之差。
注意
在计算控件的“控件来源”属性中,以 = 运算符开头。在数据访问页上,可以省略 = 运算符,而键入一个别名;例如,键入“DisplayCountry: IIf(IsNull([国家/地区])," ",[国家/地区])”。 在窗体或报表中设置计算控件的“名称”属性或在数据访问页中设置计算控件的 ID 属性时,应确保使用唯一的名称。不要使用表达式中使用的控件名称或 ID。 在窗体或报表的表达式中,可使用控件的名称或基记录源中的字段名。在数据访问页的表达式中,只能使用页的数据定义中的字段的名称。 聚合函数和域聚合函数的示
注意 不能在数据访问页中使用聚合函数和域聚合函数。此外,也不能在 Microsoft Access 项目 (.adp) 中使用域聚合函数。
使用聚合函数的表达式示例
表达式 说明 =Avg([运费]) 使用 Avg 函数显示“运费”控件的平均值。 =Count([订单ID]) 使用 Count 函数显示“订单ID”控件中的记录条数。 =Sum([销售额]) 使用 Sum 函数显示“销售额”控件值的总和。 =Sum([数量] * [价格]) 使用 Sum 函数显示“数量”和“价格”控件值的乘积总和。 =[销售额] / Sum([销售额]) * 100 显示销售百分比,即“销售额”控件值与所有“销售额”控件值的总和的比值。 注意 如果控件的“格式”属性设为“百分比”,则不要包含 *100。 使用域聚合函数的表达式示例
表达式 说明 =DLookup("[联系人姓名]", "[供应商]", "[供应商ID] = Forms![供应商ID]") 使用 DLookup 函数显示当“供应商”表的“供应商ID”字段值等于活动窗体上的“供应商ID”控件值时的“联系人姓名”字段值。 =DLookup("[联系人姓名]", "[供应商]", "[供应商ID] = Forms![新供应商]![供应商ID]") 使用 DLookup 函数显示当“供应商”表的“供应商ID”字段等于“新供应商”窗体中的“供应商ID”控件值时的“供应商ID”字段值。 =DSum("[订单金额]", "[订单]", "[客户ID] = 'RATTC'") 使用 DSum 函数显示“订单”表中“客户ID”字段值为 RATTC 时的“订单金额”字段值的总和。
注意 在计算控件中,表达式前要加上 = 运算符。 在设置计算控件的“名称”属性时,应确保使用唯一的名称。不要使用表达式中使用的控件的名称。 在查询和筛选中使用表达式示例
用于检索记录的条件示例
值的范围(>、<、>=、<=、<> 或 Between...And)
表达式 结果 > 234 对于“数量字段”,大于 234 的数字 <1200.45 对于“单价”字段,小于 1200.45 的数字 >= "Callahan" 对于“姓氏”字段,从 Callahan 到字母表结尾的所有姓氏 Between #2/2/93# And #12/1/93# 对于“订购日期”字段,从 1999 年 2 月 2 日到 1999 年 12 月 1 日的日期 (ANSI-89) Between #2/2/93# And #12/1/93# 对于“订购日期”字段,从 1999 年 2 月 2 日到 1999 年 12 月 1 日的日期 (ANSI-92)
不匹配的值 (Not)
表达式 结果 Not "美国" 对于“货主国家”字段,运往美国以外的国家的订单 Not 2 对于 ID 字段,其 ID 不等于 2 的雇员 Not T* 对于“姓氏”字段,其名称不以字母“T”打头的雇员 (ANSI-89) Not T% 对于“姓氏”字段,其名称不以字母“T”打头的雇员 (ANSI-92)
不在列表中的值 (In)
表达式 结果 In("加拿大", "英国") 对于“货主国家”字段,运往加拿大或英国的订单 In(法国, 德国, 日本) 对于“国家”名称字段,住在法国、德国或日本的雇员
文本、部分以及全部匹配的值
表达式 结果 "伦敦" 对于“货主所在市/县”字段,运往伦敦的订单 "伦敦" Or "休斯敦" 对于“货主所在市/县”字段,运往伦敦或休斯敦的订单 >="N" 显示已送货到公司的订单,公司的名称以字母 N 到 Z 打头 Like "S*" 对于“货主名称”字段,运往其名称以字母 S 打头的客户的订单 (ANSI-89) Like "S%" 对于“货主名称”字段,运往其名称以字母 S 打头的客户的订单 (ANSI-92) Right([订单ID], 2)="99" 对于“订单ID”字段,其 ID 值以 99 结束的订单 Len([公司名称]) > Val(30) 对于“公司名称”字段,其公司名称长度大于 30 个字符的订单
字段值的一部分 (Like)
表达式 结果 Like "S*" 对于“货主名称”字段,运往其名称以字母 S 打头的客户的订单 (ANSI-89) Like "S%" 对于“货主名称”字段,运往其名称以字母 S 打头的客户的订单 (ANSI-92) Like "*Imports" 对于“货主名称”字段,运往其名称以“Imports”结尾的客户的订单 (ANSI-89) Like "%Imports" 对于“货主名称”字段,运往其名称以“Imports”结尾的客户的订单 (ANSI-92) Like "[A-D]*" 对于“货主名称”字段,运往其名称以字母 A 到 D 打头的客户的订单 (ANSI-89) Like "[A-D]%" 对于“货主名称”字段,运往其名称以字母 A 到 D 打头的客户的订单 (ANSI-92) Like "*ar*" 对于“货主名称”字段,运往其名称包含字母序列“ar”的客户的订单 (ANSI-89) Like "%ar%" 对于“货主名称”字段,运往其名称包含字母序列“ar”的客户的订单 (ANSI-92) Like "Maison Dewe?" 已送货到客户的订单,订单中的客户名称“Maison”作为名称的第一部分,并具有五个字母长的第二名称,且其中前四个字母是“Dewe”而最后的字母为未知的 (ANSI-89) Like "Maison Dewe_" 已送货到客户的订单,订单中的客户名称“Maison”作为名称的第一部分,并具有五个字母长的第二名称,且其中前四个字母是“Dewe”而最后的字母为未知的 (ANSI-92)
DatePart 函数”详细表述如下:
DatePart 函数返回一个 Integer 值,其中包含给定 Date 值的指定组件。
Public Overloads Function DatePart( _ ByVal Interval As DateInterval, _ ByVal DateValue As DateTime, _ Optional ByVal FirstDayOfWeekValue As FirstDayOfWeek = VbSunday, _ Optional ByVal FirstWeekOfYearValue As FirstWeekOfYear = VbFirstJan1 _) As Integer- 或 -
Public Overloads Function DatePart( _ ByVal Interval As String, _ ByVal DateValue As Object, _ Optional ByVal DayOfWeek As FirstDayOfWeek = FirstDayOfWeek.Sunday, _ Optional ByVal WeekOfYear As FirstWeekOfYear = FirstWeekOfYear.Jan1 _) As Integer参数Interval 必选项。DateInterval 枚举值或 String 表达式,它表示所要返回的日期/时间值部分。 DateValue 必选项。所要计算的 Date 值。 FirstDayOfWeekValue 可选项。选自 FirstDayOfWeek 枚举的值,该枚举用于指定周的第一天。若未指定,则使用 FirstDayOfWeek.Sunday。 FirstWeekOfYearValue 可选项。选自 FirstWeekOfYear 枚举的值,该枚举用于指定年的第一周。若未指定,则使用 FirstWeekOfYear.Jan1。 设置Interval 参数可以有以下设置。
枚举值 字符串 所要返回的日期/时间值部分 DateInterval.Day d 月中的哪一天(从 1 到 31) DateInterval.DayOfYear y 年中的哪一天(从 1 到 366) DateInterval.Hour h 小时 DateInterval.Minute n 分钟 DateInterval.Month m 月 DateInterval.Quarter q 季度 DateInterval.Second s 秒钟 DateInterval.Weekday w 星期几(从 1 到 7) DateInterval.WeekOfYear ww 年中的哪一周(从 1 到 53) DateInterval.Year yyyy 年
FirstDayOfWeekValue 参数可以有以下设置。
枚举值 值 说明 FirstDayOfWeek.System 0 系统设置中指定的周的第一天 FirstDayOfWeek.Sunday 1 星期日(默认) FirstDayOfWeek.Monday 2 星期一(依照 ISO 8601 标准第 3.17 节) FirstDayOfWeek.Tuesday 3 星期二 FirstDayOfWeek.Wednesday 4 星期三 FirstDayOfWeek.Thursday 5 星期四 FirstDayOfWeek.Friday 6 星期五 FirstDayOfWeek.Saturday 7 星期六
FirstWeekOfYearValue 参数可以有以下设置。
枚举值 值 说明 FirstWeekOfYear.System 0 系统设置中指定的年的第一周 FirstWeekOfYear.Jan1 1 1 月 1 日所在的周(默认) FirstWeekOfYear.FirstFourDays 2 至少有四天属于新年的周(依照 ISO 8601 标准第 3.17 节) FirstWeekOfYear.FirstFullWeek 3 新年的第一个全周
异常/错误异常类型 错误号 条件 ArgumentException 5 Interval 无效。 InvalidCastException 13 DateValue 不能被强制为 Date。
备注可以使用 DatePart 函数来计算日期/时间值并返回一个特定组件。例如,可以使用 DatePart 计算某个日期是星期几或目前为几点钟。
若为 Interval 参数选择 DateInterval.Weekday,返回的值与 FirstDayOfWeek 枚举的值一致。若选择 DateInterval.WeekOfYear,DatePart 使用 System.Globalization 命名空间的 Calendar 和 CultureInfo 类来确定当前设置。
FirstDayOfWeekValue 参数会影响使用 DateInterval.Weekday 和 DateInterval.WeekOfYear Interval 设置所进行的计算。FirstWeekOfYearValue 参数影响为 Interval 指定 DateInterval.WeekOfYear 的计算。
如果有任何参数的值无效,就会发生 ArgumentException 错误。若 DateValue 参数值无法被强制为有效的 Date 值,则会发生 InvalidCastException 错误。
因为每个 Date 值都由 DateTime 结构支持,其方法在检索日期/时间部分中提供了额外的选项。例如,将时间值设置为午夜,可以获取 Date 变量的完整日期值,如下所示:
Dim CurrDatTim As Date = Now ' Current date and time.Dim LastMidnight As Date = CurrDatTim.Date ' At midnight.示例本示例取得一个日期,并使用 DatePart 函数显示该日期所在的季度。
Dim FirstDate, Msg As String 'Declare variables.Dim SecondDate As DateFirstDate = InputBox("Enter a date:")SecondDate = CDate(FirstDate)Msg = "Quarter: " & DatePart(DateInterval.Quarter, SecondDate)MsgBox (Msg)最后写为:select (cstr(datepart('yyyy',xx'-'+cstr(datepart('m',xx))) from yy
DatePart 函数 语法说明
[b][color=Blue][size=6]DatePart 函数[/size][/color][/b]适用于: Microsoft Office Access 2003
返回一个包含给定日期的指定部分的 Variant (Integer)。
语法
DatePart(interval, date[,firstdayofweek[, firstweekofyear]])
DatePart 函数语法具有这些命名参数:
[color=Blue][b][size=4]部分[/size][/b][/color] [color=Blue][b][size=4]说明[/size][/b][/color] interval 必选。字符串表达式,是要返回的时间间隔。 date 必选。要计算的 Variant (Date) 值。 firstdayofweek 可选。常量,指定一周的第一天。如果未指定,则假设为星期日。 firstweekofyear 可选。常量,指定一年的第一周。如果未指定,那么第一周将假设为 1 月 1 日所在的周。
设置
interval 参数具有下列这些设置:
[b][color=Blue][size=4]设置[/size][/color][/b] [b][color=Blue][size=4]说明 [/size][/color][/b]yyyy 年 q 季 m 月 y 一年中的日期 d 日 w 工作日 ww 周 h 时 n 分 s 秒
firstdayofweek 参数具有下列设置:
[b][color=Blue][size=4]常量[/size][/color][/b] [b][color=Blue][size=4]值[/size][/color][/b] [b][color=Blue][size=4]说明[/size][/color][/b] vbUseSystem 0 使用 NLS API 设置。 vbSunday 1 星期日(默认值) vbMonday 2 星期一 vbTuesday 3 星期二 vbWednesday 4 星期三 vbThursday 5 星期四 vbFriday 6 星期五 vbSaturday 7 星期六
firstweekofyear 参数具有下列这些设置:
[b][color=Blue][size=4]常量[/size][/color][/b] [b][color=Blue][size=4]值 [/size][/color][/b] [b][color=Blue][size=4]说明[/size][/color][/b] vbUseSystem 0 使用 NLS API 设置。 vbFirstJan1 1 由 1 月 1 日所在的周开始(默认值)。 vbFirstFourDays 2 由在新的一年中至少有四天的第一周开始。 vbFirstFullWeek 3 由一年中的第一个完整周开始。
说明
可以使用 DatePart 函数计算日期并返回特定的时间间隔。例如,可以使用 DatePart 计算一周中的星期几或当前小时。
firstdayofweek 参数会影响使用“w”和“ww”时间间隔符号的计算。
如果 date 是日期文字,那么指定的年将成为该日期的固定部分。然而,如果 date 由双引号 (" ") 引起来,并且省略了年,那么在每次计算 date 表达式时,会将当前年插入到代码中。这样,就能编写在其他年份可以使用的代码。
[b]注释[/b] 对于 date,如果 Calendar 属性设置为公历,那么,所提供的日期必须是公历。如果 Calendar 是回历,那么所提供的日期必须是回历。
返回的日期部分位于当前阿拉伯日历的时间间隔单位中。例如,如果当前日历是回历,并且要返回的日期部分是年,那么年的值将为回历年。