

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# ROWTIME
<a name="sql-reference-rowtime"></a>

ROWTIME 是一个运算符和系统列，返回流中特定行的创建时间。

有四种不同的使用方式：
+ 作为运算符
+ 作为流的系统列
+ 作为列别名，用于覆盖当前行的时间戳
+ 作为表中的普通列

有关更多详细信息，请参阅本指南中的“时间戳”、ROWTIME 和 [CURRENT\$1ROW\$1TIMESTAMP](sql-reference-current-row-timestamp.md) 主题。

**ROWTIME 运算符**  
在流式查询的 SELECT 子句中使用时，不用前面的“别名”进行限定。ROWTIME 是一个运算符，其计算结果为即将生成的行的时间戳。

类型始终是 TIMESTAMP NOT NULL。

**ROWTIME 系统列**  
每个流都有一个 ROWTIME 列。要在查询中引用此列，请使用流名称（或别名）对其进行限定。例如，以下联接查询返回三个时间戳列：其输入流的两个系统列和生成行的时间戳。

```
SELECT STREAM
  o.ROWTIME AS leftRowtime,
  s.ROWTIME AS rightRowtime,
  ROWTIME AS joinRowtime
FROM Orders AS o
  JOIN Shipments OVER (RANGE INTERVAL '1' HOUR FOLLOWING) AS s
  ON o.orderId = s.orderId

leftRowtime         rightRowtime        joinRowtime
=================== =================== ===================
2008-02-20 10:15:00 2008-02-20 10:30:00 2008-02-20 10:15:00
2008-02-20 10:25:00 2008-02-20 11:15:00 2008-02-20 10:25:00
2008-02-20 10:25:30 2008-02-20 11:05:00 2008-02-20 10:25:30
```



实际上，leftRowtime 始终等于 joinRowtime，因为指定联接时输出行的时间戳始终等于 Orders 流中的 ROWTIME 列。

因此，每个流式查询都有一个 ROWTIME 列。但是，除非您在 SELECT 子句中明确包含了 ROWTIME 列，否则不会从顶级 JDBC 查询中返回该列。例如：

```
CREATE STREAM Orders(
  "orderId" INTEGER NOT NULL,
  "custId" INTEGER NOT NULL);
SELECT columnName
FROM ALL_STREAMS;

columnName
==========
orderId
custId

SELECT STREAM *
FROM Orders;

orderId custId
======= ======
    100    501
    101     22
    102    699

SELECT STREAM ROWTIME, *
FROM Orders;

ROWTIME             orderId custId
=================== ======= ======
2008-02-20 10:15:00     100    501
2008-02-20 10:25:00     101     22
2008-02-20 10:25:30     102    699
```



这主要是为了确保与 JDBC 的兼容性：Orders 流声明了两列，因此“SELECT STREAM \$1”理应返回两列。