早教吧 育儿知识 作业答案 考试题库 百科 知识分享

oracle中比较日期大小,日期定义的是varchar2类型的,比如'2011-10-21'SQL语言中,如何把字符串类型的数据转换成整型用来比较大小,比如说,我定义了一些日期,但是varchar2格式的,现在我想

题目详情
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分如何算出来啊?
▼优质解答
答案和解析
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