2012-07-13 39 views
0

我有这样的Oracle表行:如何选择只使用Active状态

CREATE TABLE USERS(
     USERID INTEGER NOT NULL, 
     GROUPID INTEGER, 
     SPECIALNUMBER VARCHAR2(60), 
     USERNAME VARCHAR2(50), 
     PASSWD VARCHAR2(50), 
     DATETOCHANGEPASSWD DATE, 
     ADDRESS VARCHAR2(60), 
     STATEREGION VARCHAR2(50), 
     COUNTRY VARCHAR2(50), 
     USERSTATUS VARCHAR2(30), 
     TELEPHONE VARCHAR2(50), 
     DATEUSERADDED DATE, 
     USEREXPIREDATE DATE, 
     DATEUSERLOCKED CHAR(20), 
     CITY VARCHAR2(50), 
     EMAIL VARCHAR2(50), 
     DESCRIPTION CLOB 
     ) 

我用这个SQL查询来读取行:

SqlStatementSmall = "SELECT c.*" 
      + " FROM (SELECT b.*, rownum rn" 
      + " FROM (SELECT a.*" 
      + " FROM USERS a" 
      + " ORDER BY %s %s) b" 
      + " WHERE rownum <= ?) c" 
      + " WHERE rn > ?"; 

我如何修改SQL查询来选择行只有状态“有效”?

最良好的祝愿

回答

2
SqlStatementSmall = "SELECT c.*" 
      + " FROM (SELECT b.*, rownum rn" 
      + " FROM (SELECT a.*" 
      + " FROM USERS a" 
      + " ORDER BY %s %s) b" 
      + " WHERE rownum <= ?) c" 
      + " WHERE rn > ? AND USERSTATUS = 'ACTIVE'"; 
+0

谢谢你的回答!我有一个问题 - 通过这种方式,“active”这个词区分大小写。我如何使它不区分大小写? – user1285928 2012-07-13 17:34:04

+0

AND UPPER(USERSTATUS)='ACTIVE' – krx 2012-07-13 17:55:22

+0

@ user1285928 - 我不太明白'active'这个词是否区分大小写。无论您的数据库是否区分大小写。如果你的表中的值可以是'ACTIVE'和'active',那么我不建议你使用'UPPER',因为如果'USERSTATUS'上有索引,那么你的查询就不会使用它。你可以使用''WHERE Rn>?和USERSTATUS IN('ACTIVE','active')“'例如 – Lamak 2012-07-13 19:23:36

1

这真的取决于你想要应用滤镜。我猜你在开始你的rownum限制之前就想要它(我想你正在做分页)。在这种情况下,你想:

SqlStatementSmall = "SELECT c.*" 
      + " FROM (SELECT b.*, rownum rn" 
      + " FROM (SELECT a.*" 
      + " FROM USERS a" 
      + " WHERE UPPER(USERSTATUS) = 'ACTIVE'" 
      + " ORDER BY %s %s) b" 
      + " WHERE rownum <= ?) c" 
      + " WHERE rn > ?"; 

我把UPPER()函数在那里,因为你问关于忽略大小写。