如何在DB2中以varchar格式按日期查询第二个10条记录

时间:2012-07-05 18:27:28

标签: db2

假设在下表中;

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>

这里有三个问题:

  1. 为什么*不能在这里使用?
  2. 为什么不能在OVER()
  3. 中使用此新列
  4. 如何通过格式化列
  5. 获取后10条记录的集合

1 个答案:

答案 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