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 Date
FirstDate = 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 是回历,那么所提供的日期必须是回历。
返回的日期部分位于当前阿拉伯日历的时间间隔单位中。例如,如果当前日历是回历,并且要返回的日期部分是年,那么年的值将为回历年。