oracle 中比较日期大小,日期定义的是varchar2类型的,比如'2011-10-21'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 中比较日期大小,日期定义的是varchar2类型的,比如'2011-10-21'相关的知识,希望对你有一定的参考价值。

SQL语言中,如何把字符串类型的数据转换成整型用来比较大小,比如说,我定义了一些日期,但是varchar2格式的,现在我想比较日期A-日期B>180,因为原来日期A和日期B都是varchar2,这样是没法比较的,所以想转换为整型之后进行比较,有什么函数没?
大家好,刚才我把问题描述的可能不清楚,我再描述一下吧,
以下这张表叫做TA,各变量如下所示:

ID name dateA(varchar2) dateB(varchar2) score(number)
1 甲 2011/4/10 2011/6/10 40
2 乙 2011/6/10 2011/6/10 30
3 丙 2011/6/10 2011/6/10 10
4 甲 2011/4/10 2011/10/20 40
5 丙 2011/6/10 2011/6/10 80
6 甲 2011/3/10 2011/11/10 40
7 甲 2011/3/10 null 40
8 丁 2011/4/10 null 30

我想要的结果是找出,一共有几位同学满足条件dateB-dateA>180,并且把这些同学对应的分数相加,其中null就代表今天2011-11-22。
因此,一共有2位同学满足条件(分别为甲和丁,甲是第4、6、7条数据满足条件,乙是第8条数据满足条件,其中甲为40分,丁为30分),他们对应的分值之和为70分。
现在的问题是2位同学中的2如何找出来,分值之和70分如何算出来啊?

比较日期是不需要通过int类型的,可以用to_date函数,如果你的日期格式是固定的,那么可以to_date('2011-10-21','yyyy-mm-dd') ,比如A,B两个字段都是格式固定的Varchar2型日期值,那么,比较日期可以用如下语句
select * from 表名 where to_date(A,'yyyy-mm-dd') -to_date(B,'yyyy-mm-dd') >180
oracle环境下测试通过
参考技术A SELECT COUNT(*) AS "几位同学", SUM(L2.SCORE) "分值之和"
FROM (select DISTINCT L1.NAME, L1.SCORE
FROM (SELECT TA.*
FROM TA
WHERE to_date(DECODE(TA.DATEB,
'null',
TO_CHAR(SYSDATE, 'YYYY/MM/DD'),
TA.DATEB),
'yyyy-mm-dd hh24:mi:ss') -
to_date(DECODE(TA.DATEA,
'null',
TO_CHAR(SYSDATE, 'YYYY/MM/DD'),
TA.DATEA),
'yyyy-mm-dd hh24:mi:ss') > 180) L1) L2
建表语句:
Create table
create table TA
(
ID VARCHAR2(10) default '' not null,
NAME VARCHAR2(20) default '' not null,
DATEA VARCHAR2(20) ,
DATEB VARCHAR2(20) ,
SCORE VARCHAR2(20)

)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
minextents 1
maxextents unlimited
);
-- Add comments to the table
comment on table TA
is 'TEST';
-- Add comments to the columns

参考资料:12070816

本回答被提问者采纳
参考技术B 如果格式固定,是很简单的
to_date('2011-10-21','yyyy-mm-dd')追问

提示我,年份值必须在-4713和9999之间,且不能为0

追答

select *
from tablename
where nvl(to_date(b,'yyyy-mm-dd'),sysdate)-to_date(a,'yyyy-mm-dd')>180

参考技术C CONVERT(int,to_date('2011-11-22','yyyy-mm-dd') )

java 日期怎么比较大小?

java 日期怎么比较大小?

例子:

String beginTime=new String("2017-06-09 10:22:22");
String endTime=new String("2017-05-08 11:22:22"); 

    直接用Date自带方法before()和after()比较

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date sd1=df.parse(beginTime);
Date sd2=df.parse(endTime);

System.out.println(sd1.before(sd2));
System.out.println(sd1.after(sd2));

    用String的compareTo()方法:

Integer i=beginTime.compareTo(endTime);

System.out.println(i);

返回正值是代表左侧日期大于参数日期,反之亦然,日期格式必须一致

    转成date格式换成秒数比较秒数大小,getTime()方法

Date sd1=df.parse(beginTime);
Date sd2=df.parse(endTime);

long long1 =sd1.getTime()

long long2= sd2.getTime()

扩展资料:

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

参考资料:java文档date类

参考技术A 把你的日期按照你的格式(yyyy/mm/dd、yyyy-mm-dd或者其他的格式)转换(前四位比较、中间两位进行比较、最后两位进行比较)为整型或者字符型进行比较。 参考技术B java.util.Date nowdate=new java.util.Date();
String myString = "2008-09-08";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd", Locale.CHINA);
Date d = sdf.parse(myString);

boolean flag = d.before(nowdate);
if(flag)
System.out.print("早于今天")
else
System.out.print("晚于今天")本回答被提问者采纳
参考技术C java.util.Date 看随机文档
这类简单的事情不要问别人,否则你永远无法进步
参考技术D 比如说2011-1-1 ,2011-3-4 我认为最简单的方法是字符串截取比较

以上是关于oracle 中比较日期大小,日期定义的是varchar2类型的,比如'2011-10-21'的主要内容,如果未能解决你的问题,请参考以下文章

Oracle两个日期类型字段怎么比较大小

Oracle两个日期类型字段怎么比较大小

Mysql 日期比较

如何用java代码比较两个日期

jquery 如何自定义日期比较大小

oracle日期转换函数怎么调优