最简单的办法,找这张表所对应的时间字段。
我不相信在建表的时候就没有一个字段专门用来记时间
如果是在没有的话,也简单。
那你的年和月字段肯定是 字符或者数字型的,可以直接用下面的sql。
select from 表 where (年 100 + 月) > 201303 And (年 100 + 月)< 201406
这样:
select 年份=convert(varchar(4),year(max(time1)))+'年',
一月=(select sum(数据) from tablename a where year(atime1)=year(tablenametime1) and month(atime1)=1),
二月=(select sum(数据) from tablename a where year(atime1)=year(tablenametime1) and month(atime1)=2),
三月=(select sum(数据) from tablename a where year(atime1)=year(tablenametime1) and month(atime1)=3),
四月=(select sum(数据) from tablename a where year(atime1)=year(tablenametime1) and month(atime1)=4),
五月=(select sum(数据) from tablename a where year(atime1)=year(tablenametime1) and month(atime1)=5),
六月=(select sum(数据) from tablename a where year(atime1)=year(tablenametime1) and month(atime1)=6),
七月=(select sum(数据) from tablename a where year(atime1)=year(tablenametime1) and month(atime1)=7),
八月=(select sum(数据) from tablename a where year(atime1)=year(tablenametime1) and month(atime1)=8),
九月=(select sum(数据) from tablename a where year(atime1)=year(tablenametime1) and month(atime1)=9),
十月=(select sum(数据) from tablename a where year(atime1)=year(tablenametime1) and month(atime1)=10),
十一月=(select sum(数据) from tablename a where year(atime1)=year(tablenametime1) and month(atime1)=11),
十二月=(select sum(数据) from tablename a where year(atime1)=year(tablenametime1) and month(atime1)=12)
FROM tablename
group by year(time1)
以上语句测式通过。可以直接复制使用,如果具体表名,字段名称不同,直接替换表名和列名即可。(表名:TABLENAME,数据字段:数据,时间字段:TIME1)
注意,输入第一个月后,后面的月份复制就行了,然后改一下月份数即可。
之所以使用SUM统计函数,是为了防止一个年月的数据出现多次,如果出现一次,就可以不用这个函数。
1、通常情况下,Like主要用在字符类型的查询中,不会用在日期类型中。即使要用在日期类型中,也是先转换成字符型再用like。用不用like关键看你的查询需求。
2、一般情况下,查询月份都带上年份,不然搞不清是哪一年的。
3、为了查询效率,一般尽可能左边直接用字段。
所以:
select
from
[表名]
where
[字段名]
between
to_date('20080801','yyyymmdd')
and
to_date('20080831','yyyymmdd')
要比
select
from
[表名]
where
to_char([字段名],'yyyymm')
=
'200808'
--
或者:to_char([字段名],'yyyymmdd')
like
'200808%'
效率高很多。
我刚写了一个MySQL的类似sql查询。
1、将年、月、日和小时组合成一个字符串
2、月日时如果不是两位,在前面补0
3、将字符和判断区间的字符串值进行比较
select from 表 where CONCAT(vyear
,LPAD(vmonth
,2,0),LPAD(vday,2,0),LPAD(Hour,2,0)) >= '2017081000' and CONCAT(vyear,LPAD(vmonth,2,0),LPAD(vday,2,0),LPAD(Hour,2,0)) <= '2017081023'
组件使用和其他的没有什麼两样,只是在设置连接数据库的时候选择ORACLE数据库驱动就可以了
需要看你的数据库中存储的是什麼格式了
我使用的ORACLE数据库中的字段格式为'18-九月-2006
15:45:08',精确到秒
这样的格式使用
delphi查询可以这样做:
query1sqlAdd('select
from
tablename
where
DATe
>
to_date(''18-8-2006
15:45:08'',''DD-MM-YYYY
HH24:MI:SS'')
AND
DATE
<
to_date(''18-11-2006
15:45:08'',''DD-MM-YYYY
HH24:MI:SS'')'
)
;
其中'18-11-2006
15:45:08'
和
'18-9-2006
15:45:08'
就是要求的两个天数
select to_char(日期,'yyyy-mm-dd') from 表名
to_char就是个转换函数,将date型转成字符型,后边'yyyy-mm-dd' 就是你要转成的格式
当然,也可以to_char(日期,'yyyy') 直接返回年,月和日也同理
以上就是关于在数据库中,年和月是同一张表中的不同字段,但我要查询2013年3月到2014年6月之间的数据,sql语句怎么写全部的内容,包括:在数据库中,年和月是同一张表中的不同字段,但我要查询2013年3月到2014年6月之间的数据,sql语句怎么写、写一条查询SQL语句,要求按年月查询 竖列表头年份 横列表头12个月份、如何用Slect语句在Oracle数据库中查出具体某个月(年)的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)