Oracle SQL,我的WHERE子句限制特定年份

时间:2017-09-13 13:59:58

标签: sql oracle date oracle11g

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

C-300064    06-DEC-10

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

有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:4)

  

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

简单如下:

message RpcNco {
    RpcDeviceIdentifier OBSOLETE_deviceId = 1;
    core.protobuf.RpcFrequency nco1 = 2;
    core.protobuf.RpcFrequency nco2 = 3;
}

如果orderdate是SELECT customerid , orderdate FROM your_table WHERE orderdate >= DATE '2010-01-01' AND orderdate < DATE '2011-01-01'; 列,那么它的显示方式无关紧要。 DATE字面值不依赖于您的会话DATE 'YYYY-MM-DD'

答案 1 :(得分:1)

由于您使用的是Oracle,因此可以使用。

declare @MyTab table(
letter char
)

declare @MyTab2 table(
letter char
)

insert into @MyTab
select substring(a.b, v.number+1, 1) 
from (select 'ABCDEFGHZZZ' b) a
join master..spt_values v on v.number < len(a.b)
where v.type = 'P'

insert into @MyTab2
select NewLetter
from (
select case letter when 'Z' then 'A'
    when 'z' then 'a'
    else char(ascii(letter)+1) end NewLetter
from @MyTab
) MyView

select stuff(
(select ''+letter from @MyTab2
for xml path('')),1,0,'')

答案 2 :(得分:0)

如果您使用的是Oracle,那么有几种方法可以使用&#34; orderdate&#34;上的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

祝你好运!