【问题标题】:How to select rows only with Active status如何仅选择具有活动状态的行
【发布时间】:2012-07-14 01:45:42
【问题描述】:

我有这个 oracle 表:

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 查询以仅选择状态为“活动”的行?

最好的祝福

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:
    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'";
    

    【讨论】:

    • 感谢您的回答!我有一个问题 - 这样active 这个词是区分大小写的。我怎样才能使它不区分大小写?
    • AND UPPER(USERSTATUS) = 'ACTIVE'
    • @user1285928 - 我真的不明白active 区分大小写是什么意思。您的数据库是否区分大小写。如果您的表上的值可以是ACTIVEactive,那么我不建议您使用UPPER,因为如果USERSTATUS 上有索引,那么您的查询将不会使用它。例如,您可以使用" WHERE rn &gt; ? AND USERSTATUS IN ('ACTIVE','active')"
    【解决方案2】:

    这实际上取决于您希望在哪里应用过滤器。我猜你在开始限制 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() 函数放在那里,因为你问的是忽略大小写。

    【讨论】:

      猜你喜欢
      • 2011-08-19
      • 2021-09-22
      • 2019-10-22
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 2016-12-04
      相关资源
      最近更新 更多