Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询和修改数据 » 查询数据 » 选择列表:指定列

 

计算 SELECT 列表中的值

选择列表中的表达式可以比单纯的列名或字符串复杂。例如,您可以使用选择列表中数字列中的数据执行计算。

算术运算

为了说明您可以在选择列表中执行的数字运算,我们从 SQL Anywhere 示例数据库中产品的名称、库存数量和单价列表开始。

SELECT Name, Quantity, UnitPrice
FROM Products;
Name Quantity UnitPrice
Tee Shirt 28 9
Tee Shirt 54 14
Tee Shirt 75 14
Baseball Cap 112 9
... ... ...

假设惯例是在某种产品的库存为十件时补充产品库存。以下查询列出在再次订购前每种产品必须卖出的数量:

SELECT Name, Quantity - 10
   AS "Sell before reorder"
FROM Products;
Name Sell before reorder
Tee Shirt 18
Tee Shirt 44
Tee Shirt 65
Baseball Cap 102
... ...

您还可以结合多个列中的值。以下查询列出库存中每种产品的总价值:

SELECT Name, Quantity * UnitPrice AS "Inventory value"
FROM Products;
Name Inventory value
Tee Shirt 252.00
Tee Shirt 756.00
Tee Shirt 1050.00
Baseball Cap 1008.00
... ...
算术运算符优先级

当表达式中有多个算术运算符时,先计算乘法、除法和模,然后计算减法和加法。当表达式中的所有算术运算符优先级级别相同时,执行顺序为从左到右。括号中的表达式的优先级高于所有其它运算符。

例如,以下 SELECT 语句计算库存中每种产品的总价值,然后从该值中减去 5 美元。

SELECT Name, Quantity * UnitPrice - 5
FROM Products;

要确保结果正确,请尽量使用括号。以下查询与上一个查询具有相同的含义且给出的结果也相同,但语法更加精确:

SELECT Name, ( Quantity * UnitPrice ) - 5
FROM Products;

另请参见运算符优先级

字符串运算

您可以使用字符串连接运算符来连接字符串。您可以使用 ||(与 SQL/2003 兼容)或 +(受 Adaptive Server Enterprise 支持)作为连接运算符。例如,以下语句检索 GivenName 和 Surname 的值,并在结果中将二者连接在一起:

SELECT EmployeeID, GivenName || ' ' || Surname AS Name
FROM Employees;
EmployeeID Name
102 Fran Whitney
105 Matthew Cobb
129 Philip Chin
148 Julie Jordan
... ...
日期和时间运算

虽然可以在日期和时间列上使用运算符,但此操作通常涉及函数的使用。请参见SQL 函数

有关计算列的其它注意事项
  • 可以赋予列一个别名   缺省情况下,列名是选择列表中列出的表达式,但是对于计算列,使用表达式作为名称十分麻烦,并且不能提供足够的信息。

  • 可以使用其它运算符   可使用乘法运算符将多个列组合在一起。您可以使用其它运算符,包括标准的算术运算符以及逻辑运算符和字符串运算符。

    例如,以下查询列出所有客户的全名:

    SELECT ID, (GivenName || ' ' || Surname ) AS "Full name"
    FROM Customers;

    || 运算符连接字符串。在本查询中,列的别名具有空格,因此必须用双引号括起来。此规则不仅适用于列别名,还适用于数据库中的表名和其它标识符。请参见运算符

  • 可以使用函数   除了组合列之外,您可以使用多种内置函数生成所需的结果。

    例如,以下查询以大写字母列出产品名称:

    SELECT ID, UCASE( Name )
    FROM Products;
    ID UCASE(Products.name)
    300 TEE SHIRT
    301 TEE SHIRT
    302 TEE SHIRT
    400 BASEBALL CAP
    ... ...

    请参见SQL 函数