勇芳软件工作室.汉化:  Windows Management Instrumentation > WQL (SQL for WMI) >

WHERE

Previous pageReturn to chapter overviewNext page

使用WHERE子句来缩小数据,事件或模式查询的范围。有关详细信息,请参阅使用WQL查询。WHERE子句由一个属性或关键字,一个运算符和一个常量组成。所有WHERE子句必须指定Windows Management Instrumentation(WMI)查询语言(WQL)中包含的预定义操作符之一。您可以使用以下表单之一将WHERE子句附加到SELECT语句中:

 

SELECT * FROM class WHERE property operator constant

SELECT * FROM class WHERE constant operator property

 

其中*是查询的项,class是要查询的类,constant,operator和property是要使用的常量,运算符和属性或关键字。有关SELECT语句的更多信息,请参阅数据查询的SELECT语句,事件查询的SELECT语句或模式查询的SELECT语句。

 

常量的值必须是属性的正确类型。此外,操作员必须在有效的WQL运算符列表中。属性名称或常量必须出现在WHERE子句中的运算符的两边。任意算术表达式不能使用。例如,以下查询仅返回表示NTFS驱动器的Win32_LogicalDisk类的实例:

 

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

 

属性名称不能出现在操作员的两边。以下查询是无效查询的示例:

 

SELECT * FROM PhysicalDisk WHERE Partitions < (4 + 7 - 2)

 OR   (Partitions = SectorsPerTrack / 7)

 

对于WHERE子句中类描述符的大多数使用,WMI将查询标记为无效并返回错误。但是,在WMI中使用类型为目的的点(。)运算符。例如,如果Prop是MyClass的有效属性,并且类型为目的,以下查询是有效的:

 

SELECT * FROM MyClass WHERE Prop.embedprop = 5

 

比较测试总是不区分大小写。也就是说,以下三个语句全部评估为TRUE:

 

SELECT * FROM MyClass WHERE Prop1 = "cat"

SELECT * FROM MyClass WHERE Prop1 = "CAT"

SELECT * FROM MyClass WHERE Prop1 = "cAt"

 

您可以构造一个包含布尔数据类型的查询,但唯一有效的布尔运算符类型是=,!=和<>类型。值TRUE等价于数字1,值FALSE等价于数字0。以下示例是将布尔值与值TRUEFALSE进行比较的查询。

 

SELECT * FROM MyClass WHERE BoolProp = 1

SELECT * FROM MyClass WHERE BoolProp = TRUE

SELECT * FROM MyClass WHERE BoolProp <> FALSE

SELECT * FROM MyClass WHERE BoolProp = 0

SELECT * FROM MyClass WHERE BoolProp = FALSE

SELECT * FROM MyClass WHERE BoolProp != 1

SELECT * FROM MyClass WHERE BoolProp != FALSE

SELECT * FROM MyClass WHERE BoolProp <> FALSE

 

以下示例是尝试使用无效操作数的无效查询。

 

SELECT * FROM MyClass WHERE BoolProp <= TRUE

SELECT * FROM MyClass WHERE BoolProp >= 0

SELECT * FROM MyClass WHERE BoolProp > FALSE

SELECT * FROM win32_computersystem WHERE infraredsupported >= null

 

可以使用逻辑运算符和括号子表达式将多组属性,运算符和常量组合在WHERE子句中。每个组必须与以下查询中显示的AND,OR或NOT运算符相连。第一个查询检索Win32_LogicalDisk类的所有实例,名称属性设置为C或D:

 

SELECT * FROM Win32_LogicalDisk WHERE Name = "C:" OR Name = "D:"

 

第二个查询检索名为“C:”或“D:”的磁盘,只要它们有一定的剩余空间并具有NTFS文件系统:

 

SELECT * FROM Win32_LogicalDisk WHERE (Name = "C:" OR Name = "D:")

 AND  FreeSpace > 2000000  AND   FileSystem = "NTFS"

 

此示例显示使用WHERE子句的模式查询。

 

SELECT * FROM meta_class WHERE __this ISA "myClassName"

 

类meta_class将其标识为模式查询,名为__this的属性标识查询的目标类,ISA运算符请求目标类的子类的定义。因此,上述查询返回myClassName类的定义及其所有子类的定义。

 

以下示例是使用与ASSERIATORS OF语句WHERE的数据查询:

 

ASSOCIATORS OF {myClass.keyVal="Value1"} WHERE ClassDefsOnly

 

下一个示例显示使用ASSOCIATORS OF和WHERE的模式查询:

 

ASSOCIATORS OF {myClass} WHERE SchemaOnly

 

以下示例是使用REFERENCES OF语句和WHERE的数据查询:

 

REFERENCES OF {myClass.keyVal="Value1"}

 WHERE RequiredQualifier = myQual

 

最后一个示例是使用REFERENCES OF和WHERE的模式查询:

 

REFERENCES OF {myClass} WHERE SchemaOnly

 

除了WMI DATETIME格式之外,WQL WHERE子句还支持其他几种日期和时间格式:

 

·WQL支持的日期格式
·WQL支持的时间格式