oracle数据库的 to char 和to date 区别

oracle数据库的 to char 和to date 区别,第1张

一、功能不同

1、to char:将时间日期按照指定的格式输出,得到的是字符串,而非date类型。

2、to  date:将字符串按照指定的格式输出,得到的是日期类型。

二、语法不同

1、to char: to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') 。

2、to  date:to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') 。

三、规则不同

1、to char:只要被转换的是一个日期,yyyy,mm,dd中间加不加连接符,加什么连接符都可以。

2、to  date:第一个参数的yyyy,mm,dd之间有没有连接符。如果有,那么第二个参数必须有连接符,随便是什么连接符。

参考资料来源:百度百科-to_char()

参考资料来源:百度百科-date函数

区别:

前者是 年月日格式:to_char(time,'yyyy-mm-dd')

后者是 年月日 时分秒 to_date('2012-05-11 23:59:59','yyyy-mm-dd hh24:mi:ss')

组成:

在正式学习SQL语言之前,首先让我们对SQL语言有一个基本认识,介绍一下SQL语言的组成:

1.一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。

2.一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。

3.一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。

4.一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。

5.用户可以用SQL语句对视图和基本表进行查询等 *** 作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。

6.SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。

以上内容参考 百度百科-SQL数据库

我这是以oracle为例的.. .. ..

有些可能繁琐,但可以保证结果准确

楼上的第一题有误,只用话费多少是不可能精准定位出哪个电话号码在那几个月中花费那么多

1[0].select distinct t1.phone from

( select * from jifei

where to_date(month,'yyyymm') = to_date('2011-06','yyyy-mm') and expenses >50 and expenses <100 ) t1,

( select * from jifei

where to_date(month,'yyyymm') = to_date('2011-07','yyyy-mm') and expenses >50 and expenses <100 ) t2,

(select * from jifei

where to_date(month,'yyyymm') = to_date('2011-08','yyyy-mm') and expenses >50 and expenses <100 ) t3,

(

select * from jifei

where to_date(month,'yyyymm') = to_date('2011-09','yyyy-mm') and expenses = 0 ) t4,

(

select * from jifei

where to_date(month,'yyyymm') = to_date('2011-10','yyyy-mm') and expenses = 0 ) t5

where t1.phone = t2.phone

and t2.phone = t3.phone

and t3.phone = t4.phone

and t4.phone = t5.phone

1[1].select phone from

( select phone , 1 ct from jifei

where (to_date(month,'yyyymm') = to_date('2011-06','yyyy-mm')

or to_date(month,'yyyymm') = to_date('2011-07','yyyy-mm')

or to_date(month,'yyyymm') = to_date('2011-08','yyyy-mm')

and expenses >50 and expenses <100 )

or ( to_date(month,'yyyymm') = to_date('2011-09','yyyy-mm')

or to_date(month,'yyyymm') = to_date('2011-10','yyyy-mm') and expenses = 0 )

group by phone having sum(ct) = 5

2. select distinct phone from (

select phone ,

substr(phone,length(phone)-3,1) fst,

substr(phone,length(phone)-2,1) sec,

substr(phone,length(phone)-1,1) thr,

substr(phone,length(phone),1) fou

from jifei

where to_date(month,'yyyymm') >todate ('201101','yyyymm') - 1/24/60/60/60

and to_date(month,'yyyymm') <todate ('201111','yyyymm') + 1/24/60/60/60

)

where (fst = sec and sec = thr and thr = fou)

or (fst = sec and thr = fou )

or (fst = thr and sec = fou )

--oracle 可以直接使用rowid,并不是没有办法

3. delete from jifei where rowid in (

select max(rowid) from jifei where to_date(month,'yyyymm') = to_date('2011-10','yyyy-mm')

group by phone,month,expenses having count(*) = 2

)

--其它数据库估计可以这样,不过用一条sql写不完

create table temp as select * from jifei where to_date(month,'yyyymm') = to_date('2011-10','yyyy-mm')

group by phone,month,expenses having count(*) = 2

)

truncate table jifei

insert into jifei select * from temp

drop table temp

4. select distinct t1.phone from

(select phone,month from jifei

where to_date(month,'yyyymm') = to_date('2011-09','yyyy-mm') and expenses >30) t1,

(select phone,month from jifei

where to_date(month,'yyyymm') = to_date('2011-10','yyyy-mm') and expenses >30) t2

where t1.phone = t2.phone


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6840261.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-29
下一篇 2023-03-29

发表评论

登录后才能评论

评论列表(0条)

保存