【问题标题】:Oracle SQL, my WHERE clause restricting specific yearOracle SQL,我的 WHERE 子句限制特定年份
【发布时间】:2018-02-22 06:51:21
【问题描述】:

我想显示所有在 2010 年下订单的客户。当我从 custorder 表中显示“customerid”和“orderdate”时,格式如下:

C-300064    06-DEC-10

基本上我需要弄清楚如何让它只显示 orderdate 的最后 2 位数字为 10 的 customerid。

有人可以帮帮我吗?

【问题讨论】:

  • 添加一些示例表数据以及预期的结果!请格式化文本,而不是图像。

标签: sql oracle date oracle11g


【解决方案1】:

如果您使用的是 Oracle,您有多种方法可以在“orderdate”列上使用 WHERE 子句来实现此目的。但是,在使用 Oracle SQL 时,您可能需要一些额外的代码来说明不同的日期格式。我相信这些例子应该对你有用:

SELECT t1.customerid, t1.orderdate
FROM some_table t1
WHERE t1.orderdate BETWEEN '2017-01-01' AND '2017-12-31';

SELECT t1.customerid, t1.orderdate
FROM some_table t1
WEHRE t1.orderdate > '2016-12-31' AND  t1.orderdate < '2018-01-01';

SELECT t1.customerid, t1.orderdate
FROM some_table t1
WHERE NOT ('2017-01-01' > t1.orderdate OR '2017-12-31' < t1.orderdate);

BETWEEN 方法需要更长的时间来处理,所以我推荐底部的两个选项(WHERE 和 WHERE NOT)。

我已经构建了一个显示这三个示例的小提琴:http://sqlfiddle.com/#!9/38063/1

祝你好运!

【讨论】:

    【解决方案2】:

    由于您使用的是 Oracle,这将起作用。

    SELECT 
          customerid
        , orderdate
    FROM yourtable 
    WHERE EXTRACT(YEAR FROM orderdate) = 2010;
    

    【讨论】:

    • 然后就可以使用索引了。有用;只是它比较慢。
    • 太好了,请注意如果该列上存在索引,它将跳过索引,或者您必须创建函数索引。
    • 很公平......我的立场是正确的。但是,没有关于表格大小的信息。除非他拥有数百万客户,否则他可能不会注意到太大的差异。
    • 在 2010 年有数百万条记录,使用索引无论如何都是低效的 :)
    【解决方案3】:

    我想显示在 2010 年期间下订单的所有客户。

    就这么简单:

    SELECT  customerid , orderdate
    FROM your_table
    WHERE orderdate >= DATE '2010-01-01' AND orderdate < DATE '2011-01-01';
    

    如果 orderdate 是 DATE 列,那么它的显示方式并不重要。 DATE 'YYYY-MM-DD' 文字不依赖于您的会话 NLS_DATE_FORMAT

    【讨论】:

    • 我确实在几个不同的地方看到了该布局,但不确定这是否是我应该做的,因为此数据库中的日期格式 (06-DEC-10) 与您的不同已写(2010-12-10)。还是我弄错了,还是没关系?
    • 有趣,我不知道。 Ty 的帮助,非常感谢!
    • 您看到的日期格式是您拥有的用户界面工具上的 NLS 设置的函数。日期数据类型存储在系统中,没有这种格式。它只是根据 NLS 设置以这种方式呈现给我们。 SQL 标准是 YYYYMMDD 用于插入日期,如果您真的想要精确并避免隐式转换使用 to_date('2010-01-01','YYYY-MM-DD'),因此系统会将字符串转换为您指定格式的日期,这样就不会存在歧义。尽管日期文字也可以;只是附加偏好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多