Oracle 10g - 删除时间组件

WoF*_*gel 1 sql oracle date

我有一个日期的文本字段,虽然有时它也有时间组件.例如:

"23/1/1999"
"25/2/2003 05:18:00"
Run Code Online (Sandbox Code Playgroud)

现在,我只想查询它们并仅按日期组件排序.我的尝试

TO_DATE(
       TO_CHAR(
           TO_DATE(mytextfield  , 'DD-MM-YYYY HH:MI:SS')
       ,'DD-MM-YYYY')
,'MON-YYYY')
Run Code Online (Sandbox Code Playgroud)

以上在TO_DATE外部失败(ORA-01843无效月份.)

TO_CHAR(
    TO_DATE(mytextfield   , 'DD-MM-YYYY HH:MI:SS')
,'DD-MM-YYYY')
Run Code Online (Sandbox Code Playgroud)

上面的工作,但我留下了一个字符串,而不是一个日期.

--------解决方案使用接受的答案

只是用

EXTRACT(MONTH FROM  TO_DATE(timetable.string_time)  , 'DD-MM-YYYY HH24:MI:SS'))

EXTRACT(YEAR FROM   TO_DATE(timetable.string_time)  , 'DD-MM-YYYY HH24:MI:SS'))
Run Code Online (Sandbox Code Playgroud)

如答案所述,您可以在ORDER BY和SELECT中交换使用它的顺序.

本月将需要一些数字格式,以及一些concats,但这非常有效.

Ano*_*ous 6

NLS_DATE_FORMAT指定与TO_CHARTO_DATE函数一起使用的默认日期格式.让我们改变它以从SQL*Plus获得不错的输出:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
Run Code Online (Sandbox Code Playgroud)

首先,我们使用TO_DATE将日期的文本表示转换为实际日期类型(请注意,下面的日期格式接受较短的文本):

SELECT TO_DATE('25/2/2003 05:18:00', 'DD-MM-YYYY HH24:MI:SS') FROM DUAL;
2003-02-25 05:18:00

SELECT TO_DATE('25/2/2003', 'DD-MM-YYYY HH24:MI:SS') FROM DUAL;
2003-02-25 00:00:00
Run Code Online (Sandbox Code Playgroud)

第二 - 我们想截断日期以摆脱不必要的字段(TRUNC函数):

SELECT TRUNC(TO_DATE('25/2/2003 05:18:00', 'DD-MM-YYYY HH24:MI:SS')) FROM DUAL;
2003-02-25 00:00:00

SELECT TRUNC(TO_DATE('25/2/2003 05:18:00', 'DD-MM-YYYY HH24:MI:SS'),'MONTH') FROM DUAL;
2003-02-01 00:00:00
Run Code Online (Sandbox Code Playgroud)

现在您可以使用此功能,ORDER BY或者GROUP BY您希望根据年/月/日(等等)进行排序.

如果你想做一些异国情调的分类(对于你不关心的分组:{year,month}没有任何不同{month, year}) - 例如月/年,那么我认为你需要编写各个字段并使用以下内容:

SELECT EXTRACT(MONTH FROM DATE '1998-03-07') FROM DUAL;
3

SELECT EXTRACT(YEAR FROM DATE '1998-03-07') FROM DUAL;
1998
Run Code Online (Sandbox Code Playgroud)

  • 日期没有格式 - 它是日期的**内部**表示.例如,如果您希望SQL*Plus以特定格式显示**日期,那么`ALTER SESSION SET NLS_DATE_FORMAT ='MON-YYYY';`是您的朋友.但它仍然是一个日期(没有**显示的日期和时间**) (3认同)
  • +1,但我打赌`HH`需要是'HH24`. (2认同)
  • @WoF_Angel:你的要求似乎是矛盾的.在你的问题中,你抱怨说"以上工作,但我留下了一个字符串,而不是一个日期"; 现在你抱怨你想要一个"MON-YYYY"格式的字符串而不是日期.我错过了什么? (2认同)