假设在下表中;
column name | type
id | int
date | varchar
当我使用
时SELECT ROWNUMBER() OVER( ORDER BY TYPE_DATE ) as ROWID,
TO_DATE( date, 'mm\dd\yyyy' ) as TYPE_DATE,
*
FROM TABLE
我总是低于错误:
SQL0104N an expected token "*" was found following .... <select_sublist>
这里有三个问题:
*
不能在这里使用?OVER()
答案 0 :(得分:1)
要回答您的第一个问题,原因是您已指定其他列,而DB2无法将此*
扩展为列列表。您可以通过添加表格标识FROM TABLE T
来解决此问题,并使用公开的标识符来扩展列列表SELECT ..., T.*
正如您在此Information Center图表中看到的那样,您只能拥有*
个OR表达式和exposed-name.*
>--+-*-----------------------------------------------+---------><
| .-,-------------------------------------------. |
| V | |
'---+-expression--+-------------------------+-+-+-'
| | .-AS-. | |
| '-+----+--new-column-name-' |
'-exposed-name.*--------------------------'
对于二和三,列不能通过别名引用同一SELECT
子句中的函数值来访问它。您可以将其降低到子选择,然后使用OVER()
功能。然后,您可以通过添加BETWEEN
:
SELECT ROWNUMBER() OVER( ORDER BY TYPE_DATE ) as ROWID, T1.*
FROM (
SELECT TO_DATE( date, 'mm\dd\yyyy' ) as TYPE_DATE, T.*
FROM TABLE T
) T1
WHERE ROWNUMBER() OVER( ORDER BY TYPE_DATE ) BETWEEN 10 AND 20
ORDER BY TYPE_DATE