SQL只查询sql 月份相减

SQL时间查询和子查询
1,插入记录使用INSERT 语句。
INSERT INTO
tableName(列名列表) VALUES(值列表)
tableName--表明给哪个表中插入记录
列名列表--表明要给哪几个列插入值
值列表--插入的具体值
插入新记录后记得执行以下SQL语句:
【示例】给顾客表中插入一条新记录:7,张三,,029-9878998
对于出生日期的值,如果直接采用字符串的形式,那么日期格式要符合当前会话的nls_date_language和nls_date_format的要求。
可通过select *
from v$nls_查看当前会话的参数信息;
可以采用DATE关键字后跟日期字面量,如:DATE‘’
。这样能够显式将字符串转换为日期值,要求日期格式必须是’YYYY-MM-DD’的形式。
insert into customers (customer_id, first_name, last_name, dob,
phone) values(6, 'cissst', 'cissst', to_date('',
'yyyy-mm-dd'), 888-888-8888);
(日期格式要匹配
注意字符串和日期类型 数字类型和字符串类型的区别)
CUSTOMER_ID
FIRST_NAME LAST_NAME &DOB &
& &PHONE &
-----------
---------- ---------- -------------- ------------
& & & 6 cissst
& & cissst &
& 01-1月 -92 & &
-8888 & & &
& & & 1 John
& & & Brown
& & &01-1月 -65
& & 800-555-1211
& & & 2 Cynthia
& &Green &
& &05-2月 -68 &
& 800-555-1212 &
& & & 3 Steve
& & &White
& & &16-3月 -71
& & 800-555-1213
& & & 4 Gail
& & & BLACK
& 800-555-1214 &
& & & 5 Doreen
& & Blue &
& & 20-5月 -70 &
1,使用TO_CHAR(x[,format])将日期值转换为字符串
一个日期值
format字符串用来说明转换后的字符串的格式,如果没有该参数,则使用当前会话中的日期语言和日期格式进行转换。
format中可使用的格式化参数有:
--两位的世纪
四位的年份 & &
两位的年份
两位的月份
--月份的完整单词,全大写(如果当前会话的日期语言是中文,则显示:x月)
--月份的完整单词,首字母大写
--月份单词的前三个字母,全大写 & &Mon --
月份单词的前三个字母,首字母大写
本月中的第几天
周几的完整单词,全大写
&-- 周几的完整单词,首字母大写
周几单词的前三个字母,首字母大写
24小时格式的小时 &
12小时格式的小时
【示例】显示顾客表中的信息,并将出生日期列的值转换为”YYYY/MM/DD
Dy”的形式
-------------- &
15-5月 -15
select to_char(sysdate)
TO_CHAR(SYSDAT &
-------------- &
15-5月 -15
select to_char(sysdate, 'cc')
select to_char(sysdate, 'cc yyyy')
select to_char(sysdate, 'cc yy')
select to_char(sysdate, 'cc yyyy')
select to_char(sysdate, 'cc yyyy-mm')
TO_CHAR(SY
----------
21 2015-05
select to_char(sysdate, 'cc yyyy-mon')
TO_CHAR(SYSDATE, &
---------------- &
21 2015-5月
select to_char(sysdate, 'cc yyyy-month') from
TO_CHAR(SYSDAT &
-------------- &
21 2015-5月
select to_char(sysdate, 'cc yyyy-month-dd') from
TO_CHAR(SYSDATE,' &
----------------- &
21 2015-5月
select to_char(sysdate, 'cc yyyy-dd-mm') from
TO_CHAR(SYSDA &
------------- &
select to_char(sysdate, 'cc dd/mm/yyyy') from
TO_CHAR(SYSDA &
------------- &
15/05/2015 & & &
select to_char(sysdate, 'cc dd/mm/yyyy day') from
TO_CHAR(SYSDATE,'CCDD/M &
----------------------- &
15/05/2015 星期五 & &
select to_char(sysdate, 'cc dd/mm/yyyy day dy') from
TO_CHAR(SYSDATE,'CCDD/MM/YYYYDAYDY')
------------------------------------
15/05/2015 星期五 星期五 & &
select to_char(sysdate, 'cc dd/mm/yyyy day dy hh:mi:ss') from
TO_CHAR(SYSDATE,'CCDD/MM/YYYYDAYDYHH:MI:SS')
---------------------------------------------
15/05/2015 星期五 星期五 09:28:32 & &
select to_char(sysdate, 'cc dd/mm/yyyy day dy h:mi:s') from
to_char(sysdate, 'cc dd/mm/yyyy day dy h:mi:s') from
行出现错误:&
ORA-01821:
日期格式无法识别 (必须双写 不能单写)
select to_char(sysdate, 'cc dd/mm/yyyy day dy h:mi:ss') from
to_char(sysdate, 'cc dd/mm/yyyy day dy h:mi:ss') from
行出现错误:&
ORA-01821:
日期格式无法识别&
select to_char(sysdate, 'cc dd/mm/yyyy day dy hh:mi:ss') from
TO_CHAR(SYSDATE,'CCDD/MM/YYYYDAYDYHH:MI:SS')
---------------------------------------------
15/05/2015 星期五 星期五 09:29:13 & &
select customer_id, to_char(dob, 'yyyy/mm/dd dy') from customers
order by customer_
CUSTOMER_ID
TO_CHAR(DOB,'YYYY/MM/DD & &
-----------
----------------------- & &
星期五 & &
星期一 & &
星期二 & &
星期三 & &
星期三 & &
星期三 & &
星期三 & &
2,使用TO_DATE(x[,format])函数将字符串转换为日期值
x--一个日期字符串
format--用来说明字符串中的日期格式。格式字符串中可使用的参数和前面一样。如果没有该参数,则默认使用当前会话中的日期语言和日期格式进行转换。
【示例】给顾客表中插入一条新记录:8,李四,
19:08:23,029-
insert into customers values(9, 'jinping', 'xi',
to_date('', 'yyyy-mm-dd'),
'999-999-9999');
(1)转换时,实际日期值月和日对应的字符位数可以不足,但不能超过宽度。
insert into customers values(10, 'jinping', 'xi',
to_date('', 'yyyy-mm-dd'),
'999-999-9999');
如果实际日期值年份对应的值只有两位,而格式字符串中是’YYYY’,则转换后的日期年份前两位补零。
insert into customers values(9, 'jinping', 'xi',
to_date('15-05-14', 'yyyy-mm-dd'),
'999-999-9999');
&9 jinping
& & & 2014-5月
-15 & & 999-999-9999
如果格式字符串中是’YY’,则转换后的日期年份前两位和当前系统日期的世纪相同。
insert into customers values(9, 'jinping', 'xi',
to_date('15-05-14', 'yy-mm-dd'), '999-999-9999');
&9 jinping
& & & 2014-5月
-15 & & 999-999-9999
如果实际日期值年份对应的值只有两位,而格式字符串中是’RRRR’或’RR’,则转换后的日期年份前两位根据如下规则进行解释:数据不见啦
&转换的年份 & 00-49 &
转换结果 (转换后的年份前两位和系统相同) 50- 99
&转换结果(当前系统年份前两位减一
系统 50-99 年
&转换的年份 & 00-49 &
转换结果 (当前系统年份前两位加一) 50- 99 &转换结果
(转换后的年份前两位和系统相同
系统 00-49 年
&转换的年份 & 00-49 &
转换结果 &50- 99
& 2014 & & 2014
2014 & &2065
&系统 50-99 年
&转换的年份 & 00-49 &
转换结果 &50- 99
&转换结果&
& 2065 & & 2014
2114 & &2044
三、日期值相关函数
1,ADD_MONTHS(x,y)
返回日期值x加上y个月后的结果。如果y为负值,则表示减去y个月。
select add_months(sysdate, 1) (如果大于12个月
则向前加一年)
ADD_MONTHS(SYS &
-------------- &
15-6月 -15
select add_months(sysdate, -26)
ADD_MONTHS(SYS &
-------------- &
&(小于12个月,向后减去一年) &
15-3月 -13
2,LAST_DAY(x)
返回日期值x当月的最后一天的日期。
select last_day(sysdate)
LAST_DAY(SYSDA &
-------------- &
31-5月 -15
select to_char(last_day(add_months(sysdate, -3)), 'yyyy-mm-dd')
TO_CHAR(LA
----------
&(按照格式可以数个函数相叠加) &
3,MONTHS_BETWEEN(x,y)
返回日期x减去日期y后的月份差。
select months_between(date'', sysdate) from
4,NEXT_DAY(x,day)
day--是一个表示星期几的字符串(和nls_date_language有关,如’saturday’
,’星期六’)
该函数返回从日期x开始,到达下个指定的星期几的日期
select next_day(sysdate, 'sat')
NEXT_DAY(S
----------
eg:(写在中间的小乱入)
select to_char(add_months(sysdate, -4), 'mon') from
select to_char(add_months(sysdate, -4), 'month') from
TO_CHAR(ADD_M &
------------- &
5,ROUND(x[,unit])
对日期进行舍入取整,如果没有参数unit,则将日期舍入为最近的一天。如果有参数unit,它表示对指定的单元进行操作。
例如,unit取’YYYY’则表示舍入到最近的年份;‘MM’表示舍入到最近的月份;’HH’表示舍入到最近的分钟。。。。。。
select round(date'', 'mm')
ROUND(DATE
----------
& & (四舍五入到6月) &
select round(date'', 'yyyy')
ROUND(DATE
----------
& &(四舍五入到最近的一年)
select round(date'', 'yyyy')
ROUND(DATE
----------
& &(四舍五入到最近的一年)
6,TRUNC(x[,unit])
对日期值x进行截断操作。如果没有参数unit,则将日期截断为当天的开始时间,即00:00:00.
如果参数unit为‘YYYY’,则表示返回当年的第一天;
如果unit为‘MM’,则表示返回当月的第一天;
如果unit为’HH’,则表示将分和秒置为0.
select trunc(sysdate, 'yyyy')
TRUNC(SYSD
----------
时间戳(timestamp)是一种数据类型,该类型可以存储一个比较精确的时间点。世纪、四位年份、月、日、小时、分、带小数位的秒。
TIMESTAMP(second_precision)
second_precision代表秒的小数位宽度,取值在0和9之间。
store模式中的表purchases_with_timestamp中含有时间戳类型的列。
select product_id, customer_id, to_char(made_on, 'cc yyyy-mm-dd
hh:mi:ss') from
purchases_with_(select后的选择内容中可以进行列的tochar操作)
要设置当前会话中的时间戳数据的显示格式,可以使用如下设置语句:
session set
nls_timestamp_format=‘HH24:MI:SS.FF9’;&
1,要给表中插入时间戳类型的数据时,可以在字符串形式的值前面使用TIMESTAMP关键字。
例如:TIMESTAMP’
18:23:56.’
当表中该时间戳列的精度小于实际值时,实际值会被自动进行舍入操作。
2,字符串和时间戳值之间的转换可以使用以下函数:
TO_TIMESTAMP(x,format)
TO_TIMESTAMP('
19:09:45.9876543','YYYY-MM-DD HH24:MI:SS.FF9')
SYSTIMESTAMP
---------------------------------------------------------------------------
10.10.05.296000 AM +08:00 &
eg:(可以选择中间的一部分 这个可以注意下
&选择少数数据的一种写法)
select to_char(systimestamp, 'mi:ss.ff9') from
TO_CHAR(SYSTIME &
--------------- &
五、时间间隔
时间间隔数据类型用来存储一段时间长度。Oracle中提供了两种表示时间间隔的数据类型:
1,INTERVAL
YEAR(precision) TO MONTH &
(用于表示n年m月的间隔)
precision表示年数的位数,取值范围0~9,默认为2
2,INTERVAL
DAY(precision1) TO SECOND(precision2) &
(用于表示n天m秒的间隔)
precision1表示天数的位数,取值范围0~9,默认为2
precision2表示秒的小数部分的位数,取值范围0~9,默认为6
时间间隔可以是正数,也可以是负数。
coupons表中存储了优惠券信息,其中的duration列(INTERVAL
YEAR(3) TO MONTH)用来记录优惠券的有效时间间隔。
如果要给coupons表中duration列插入数据,可使用以下方式得到一个时间间隔值:
1,使用关键字:
INTERVAL ‘n-m’ &YEAR(x) TO MONTH
INTERVAL ‘2’
YEAR --年份默认位数为2
INTERVAL ’2’
YEAR(3) --年份实际值可以小于声明的位数,但不能超过
INTERVAL ‘3’
‘2-4’ YEAR TO MONTH
’23-10’ YEAR(3) TO MONTH&
’234-5’ YEAR(3) TO MONTH
insert into coupons values(7, '$99 off test',
to_yminterval('2-3'));
注:年份的位数不能超过表中列的实际类型宽度,否则出错
2,使用TO_YMINTERVAL(x)函数
x--是形如’y-m‘的字符串
示例:TO_YMINTERVAL(’23-5’)
3,使用NUMTOYMINTERVAL(x,unit)
unit--转换单位,可取值’YEAR’
或‘MONTH’
NUMTOYMINTERVAL(2.5,’YEAR’)
promotions表用来存储促销信息,其中的duration列(INTERVAL
DAY(3) TO SECOND(4))记录促销的时间间隔。
如果要给promotions表的duration列插入数据:
1,使用关键字:
INTERVAL &‘d h:m:s’ DAY(x) TO
INTERVAL ‘1’
DAY --天的默认位数为2
INTERVAL ‘4’
‘34’ SECOND
INTERVAL ‘2
3’ DAY TO HOUR
INTERVAL ‘1
2:2’ DAY TO MINUTE
INTERVAL ‘2
0:0:34’ DAY TO SECOND
‘123 2:23:45’ DAY(3) TO SECOND
‘123 2:23:45.678’ DAY(3) TO SECOND(3)
2,使用TO_DSINTERVAL(x)函数
x--是形如’d
h:m:s.f‘的字符串
示例:TO_DSINTERVAL('23
2:23:56.23');
3,使用NUMTODSINTERVAL(x,unit)
unit--转换单位,可取值’DAY’
、‘HOUR’、’MINUTE’、’SECOND’.
NUMTODSINTERVAL(2.5,’MINUTE’)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。--查询当天:&& &
select&*&from&info&where&DateDiff(dd,datetime,getdate())=0&&&&&&
--查询24小时内的:&& &
select&*&from&info&where&DateDiff(hh,datetime,getDate())&=24&&&&&&
--info为表名,datetime为数据库中的字段值& &
--查询当天:
select&*&from&table&where&DateDiff(dd,datetime,getdate())=0&
--table 为表名,datetime为数据库中的字段值
DATEDIFF 函数:语法:
select&*&from&table&where&DateDiff(dd,datetime,getdate())=0&
备注:enddate 减去 startdate。如果 startdate 晚于 enddate,则返回负值。如果结果超出整数值范围,则 DATEDIFF 将产生错误。对于毫秒,最大数是 24 天 20 小时 31 分钟零 23.647 秒。对于秒,最大数是 68 年。跨分钟、秒和毫秒等边界计算的方法使得 DATEDIFF 指定的结果在所有数据类型中均一致。结果是带正负号的整数值,它等于跨第一个和第二个日期间的 datepart 边界数。例如,在 1 月 4 日(星期日)和 1 月 11 日(星期日)之间的星期数是 1。
SELECT&*&FROM&表&WHERE&datediff(month,[dateadd],getdate())=0&&&&&&
SELECT&*&FROM&表&WHERE&datediff(week,[dateadd],getdate())=0&&&&&&
--包括本年这些查询方式是一样的&&&&
SELECT&*&FROM&表&WHERE&datediff(month,[dateadd],getdate())=0&&
SELECT&*&FROM&表&WHERE&datediff(week,[dateadd],getdate())=0&&&
--包括本年这些查询方式是一样的sql server中的时间函数1.&& 当前系统日期、时间
select&getdate()&&&
2. dateadd&& 在向指定日期加上一段时间的基础上,返回新的 datetime 值&&& 例如:向日期加上2天
select&dateadd(day,2,'')&&&
3. datediff 返回跨两个指定日期的日期和时间边界数。
select&datediff(day,'','')&&&&
4. datepart 返回代表指定日期的指定日期部分的整数。
SELECT&DATEPART(month,&'')&&&
5. datename 返回代表指定日期的指定日期部分的字符串
SELECT&datename(weekday,&'')&&&
6. day(), month(),year() --可以与datepart对照一下
select&当前日期=convert(varchar(10),getdate(),120),当前时间=convert(varchar(8),getdate(),114)&&
select&datename(dw,'')&&
select&本年第多少周=datename(week,'')&&
&&&&&&&,今天是周几=datename(weekday,'')&&
函数 参数/功能&GetDate( ) 返回系统目前的日期与时间&DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期&DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值&DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称参数 interval的设定值如下:值 缩 写(Sql Server) Access 和 ASP 说明&Year Yy yyyy 年 1753 ~ 9999&Quarter Qq q&& 季 1 ~ 4&Month Mm m&& 月1 ~ 12&Day of year Dy y 一年的日数,一年中的第几日 1-366&Day Dd d&& 日,1-31&Weekday Dw w 一周的日数,一周中的第几日 1-7&Week Wk ww 周,一年中的第几周 0 ~ 51&Hour Hh h&& 时0 ~ 23&Minute Mi n 分钟0 ~ 59&Second Ss s 秒 0 ~ 59&Millisecond Ms - 毫秒 0 ~ 999access 和 asp 中用date()和now()取得系统日期时间;其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,这些函数的用法也类似举例:1.GetDate() 用于sql server :select GetDate()2.DateDiff('s','',' 22:56:32')返回值为 514592 秒DateDiff('d','',' 22:56:32')返回值为 5 天3.DatePart('w',' 22:56:32')返回值为 2 即星期一(周日为1,周六为7)DatePart('d',' 22:56:32')返回值为 25即25号DatePart('y',' 22:56:32')返回值为 206即这一年中第206天DatePart('yyyy',' 22:56:32')返回值为 年判断表存在不存在:&
select&&&count(*)&&&from&&&sysobjects&&&where&&&type='U'&&&and&&&name='你的表名'&&&
判断字段存在不存在:&
select&&&count(*)&&&from&&&syscolumns&&
where&&&id&&&&&&&=&&&(select&&&id&&&from&&&sysobjects&&&where&&&type='U'&&&and&&&name='你的表名')&&&&&&
and&&&&&&&name&&&=&&&'你要判断的字段名'&&
//SQL当前日期获取技巧一个月第一天的SQL 脚本:&&&&
SELECT&DATEADD(mm,&DATEDIFF(mm,0,getdate()),&0)&&
本周的星期一&&&&
SELECT&DATEADD(wk,&DATEDIFF(wk,0,getdate()),&0)&&
一年的第一天&&&&
SELECT&DATEADD(yy,&DATEDIFF(yy,0,getdate()),&0)&&
季度的第一天&&&&
SELECT&DATEADD(qq,&DATEDIFF(qq,0,getdate()),&0)&&
当天的半夜&&&&
SELECT&DATEADD(dd,&DATEDIFF(dd,0,getdate()),&0)&&
上个月的最后一天&&&&
SELECT&dateadd(ms,-3,DATEADD(mm,&DATEDIFF(mm,0,getdate()),&0))&&
去年的最后一天& &
阅读(...) 评论()3332人阅读
sql server(26)
--以 12:56:55为例
--convert(nvarchar(10),CreateDate,120) & & &=& & & &
--DATEPART(month,CreateDate) & & &=& & & &12
--DATEPART(year,CreateDate) & & &=& & & &2013
--还可以这样
select datepart(YEAR,'')
select datepart(yyyy,'')
select datepart(yy,'')
select datepart(MONTH,'')
select datepart(mm,'')
select datepart(m,'')
select datepart(dd,'')
--1年中的第多少天
select datepart(dy,'')
select datepart(qq,'')
--1年中的第多少周
select datepart(wk,'')
select datepart(dw,'')
SELECT CONVERT(VARCHAR(10),GETDATE(),120) &--
SELECT CONVERT(VARCHAR(10),GETDATE(),101) &--07/13/2015
--按日分组:
select convert(nvarchar(10),CreateDate,120) as Times,ISNULL(sum(Unit),0.0) as Drinking from pdt_Out
group by convert(nvarchar(10),CreateDate,120)
--按月分组:2012-01
select DATEPART(month,CreateDate) as Times,sum(Unit) as Totals from pdt_Out
group by DATEPART(month,CreateDate)
--按年分组:2013
select DATEPART(year,CreateDate) as Times,sum(Unit) as Totals from pdt_Out
group by DATEPART(year,CreateDate)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:248874次
积分:7347
积分:7347
排名:第2455名
原创:418篇
转载:457篇
评论:18条
(10)(30)(10)(12)(5)(6)(97)(88)(42)(49)(16)(25)(18)(36)(43)(23)(36)(18)(33)(40)(66)(171)(22)(1)}

我要回帖

更多关于 sql 月份相减 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信