使用oracle db的日期函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用oracle db的日期函数相关的知识,希望对你有一定的参考价值。
在创建表时我已经提到varchar2类型来存储日期,现在我不确定oracle查询来检索“从 - 到 - 日期”。
直到现在我已经尝试过这个查询
SELECT DSC_REF,EMP_NO, EMP_NAME, ACTION_DATE from DSC_UPLOAD
WHERE ACTION_DATE Between (extract(month from to_date(ACTION_DATE,'dd/mm/yyyy')) = '02'
(extract(month from to_date(ACTION_DATE,'dd/mm/yyyy')) = '03'
AND extract(year from to_date(ACTION_DATE,'dd/mm/yyyy'))='2018')
答案
假设ACTION_DATE
是DATE
数据类型,那么一个简单的方法就是使用DATE
文字:
SELECT DSC_REF,
EMP_NO,
EMP_NAME,
ACTION_DATE
from DSC_UPLOAD
WHERE ACTION_DATE >= DATE '2018-02-01'
AND ACTION_DATE < DATE '2018-04-01'
如果它是一个字符串(为什么?)那么:
SELECT DSC_REF,
EMP_NO,
EMP_NAME,
ACTION_DATE
from DSC_UPLOAD
WHERE TO_DATE( ACTION_DATE, 'dd/mm/yyyy' ) >= DATE '2018-02-01'
AND TO_DATE( ACTION_DATE, 'dd/mm/yyyy' ) < DATE '2018-04-01'
有没有办法只使用月份和年份检索数据而不提及日期
你可以做:
WHERE EXTRACT( MONTH FROM TO_DATE( ACTION_DATE, 'dd/mm/yyyy' ) ) IN ( 2, 3 )
AND EXTRACT( YEAR FROM TO_DATE( ACTION_DATE, 'dd/mm/yyyy' ) ) = 2018
关于您的查询,如果ACTION_DATE
是DATE
数据类型,那么:
to_date(ACTION_DATE,'dd/mm/yyyy')
是个坏主意。 TO_DATE( date_string [, format_string [, nls_string] ] )
有一个签名,需要1到3个字符串参数。 Oracle将尝试提供帮助,并使用NLS_DATE_FORMAT
会话参数作为格式模型将您的日期隐式转换为字符串,并最终得到一个有效的查询:
TO_DATE(
TO_CHAR(
ACTION_DATE,
(
SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT'
)
),
'dd/mm/yyyy'
)
如果NLS_DATE_FORMAT
与dd/mm/yyyy
不匹配,那么你会得到一个例外 - 而NLS_DATE_FORMAT
是一个会话参数,所以每个用户都可以修改它,它可能在用户甚至用户会话之间不一致。
另一答案
当您的日期字符串始终格式化为dd / mm / yyyy时,获得月份和年份的一种方法是:
month = to_char(to_date(action_date,'dd/mm/yyyy'),'mm')
year = to_char(to_date(action_date,'dd/mm/yyyy'),'yyyy')
两者之间的语法是:
expression BETWEEN value1 AND value2;
在给出示例查询后,不确定您的选择是什么。
以上是关于使用oracle db的日期函数的主要内容,如果未能解决你的问题,请参考以下文章