如何对sql中每个日期的数据进行分类?

How to categorize data for each date in sql?

我正在使用 Oracle sql developer.And 我必须将一些数据从 table.

分类到每个 Date

我使用 TO_CHAR 函数更改日期格式。

select to_char(txn_date, 'dd-mon-rrrr') my_day, some_coloums
from mwt_wallet_transactions 
order by my_day;

上一个没问题。但我想在给定的日期得到它:

select to_char( txn_date, 'dd-mon-rrrr') my_day, some_coloums
from mwt_wallet_transactions 
where my_day like '08-feb-2015'
order by my_day;

我在网上搜索了这个,大多数人要求像这样使用CONVERT函数:

select convert (VARCHAR(10), txn_date , 23 )  my_day, some_colomns
from mwt_wallet_transactions 
where my_day like '08-feb-2015'
order by my_day;

但这对我不起作用。帮我解决这个问题!

您不能在 WHERE 子句中使用 select 列表列别名。使用派生table访问它:

select * from
(
 select *some_computed_value* as my_day, some_colomns
 from mwt_wallet_transaction
) 
where *my_day conditions*
order by my_day

where my_day like '08-feb-2015'

我认为您对 SELECTIONFILTER PREDICATE 感到困惑。

此外,请记住,''08-feb-2015' 不是 DATE,它是 string.

您想根据 DATE 值过滤行。因此,将文字转换为 R.H.S。使用 TO_DATE 进入 DATE 或使用 ANSI Date literal 如果你没有时间部分。

现在,请记住,DATE 包含日期和时间元素,因此您需要 -

  • 要么在日期列上使用 TRUNC 来摆脱时间元素
  • 或者,使用 DATE 范围条件 以获得更好的性能,因为它会使用任何 常规索引 在日期栏上。

我假设 my_day 作为日期列。修改过滤器为:

使用 ANSI 日期文字:固定格式 'YYYY-MM-DD'

where my_day >= DATE '2015-02-08' and   my_day < DATE '2015-02-09'

或者,TO_DATE 具有适当的 格式模型 。请记住,TO_DATENLS 依赖的,所以我使用 NLS_DATE_LANGUAGE 使其独立于 NLS。

WHERE my_day >= TO_DATE('08-feb-2015','dd-mon-yyyy','NLS_DATE_LANGUAGE=american') 
AND   my_day < TO_DATE('09-feb-2015','dd-mon-yyyy','NLS_DATE_LANGUAGE=american')

以上。 my_day 被假定为静态日期列,而不是列别名。

我的解决方案:

我检查了这个解决方案,它运行良好,

select * from
(select cast( TRUNC(txn_date) as date) my_day ,some_columns
from mwt_wallet_transactions
)
where my_day = '08-FEB-15'
order by my_day
;

或者我们可以使用:

select * from
(select to_char( txn_date, 'dd-mon-rrrr') my_day 
from mwt_wallet_transactions
)
where my_day = '08-feb-2015'
order by my_day;