‘壹’ sql 计算一个月几天
使用 datediff 来获取两个时间差:
如语句:
select datediff(day,"2015-2-1","2015-3-1")
返回2105年2月份共 28 天
DATEDIFF 函数 [日期和时间]
功能 返回两个日期之间的间隔。
语法 DATEDIFF ( date-part, date-expression-1, date-expression-2 )
date-part : year | quarter | month | week | day | hour | minute | second | millisecond
参数 date-part 指定要测量其间隔的日期部分。
有关日期部分的详细信息,请参见日期部分。
date-expression-1 某一间隔的起始日期。从 date-expression-2 中减去该值,返回两个参数之间 date-parts 的天数。
date-expression-2 某一间隔的结束日期。从该值中减去 Date-expression-1,返回两个参数之间 date-parts 的天数。
用法 此函数计算两个指定日期之间日期部分的数目。结果为日期部分中等于(date2 - date1)的有符号的整数值。
当结果不是日期部分的偶数倍时,DATEDIFF 将被截断而不是被舍入。
当使用 day 作为日期部分时,DATEDIFF 返回两个指定的时间之间(包括第二个日期但不包括第一个日期)的午夜数。
当使用 month 作为日期部分时,DATEDIFF 返回两个日期之间(包括第二个日期但不包括第一个日期)出现的月的第一天的数目。
当使用 week 作为日期部分时,DATEDIFF 返回两个日期(包括第二个日期但不包括第一个日期)之间星期日的数目。
对于更小的时间单位存在溢出值:
milliseconds 24 天
seconds 68 年
minutes 4083 年
others 没有溢出限制
如果超出这些限制,此函数将返回溢出错误。
标准和兼容性 SQL/92 Transact-SQL 扩展。
SQL/99 Transact-SQL 扩展。
Sybase 与 Adaptive Server Enterprise 兼容。
下面示例的语句返回 1: SELECT datediff( hour, '4:00AM', '5:50AM' )
下面的语句返回 102: SELECT datediff( month, '1987/05/02', '1995/11/15' )
下面的语句返回 0: SELECT datediff( day, '00:00', '23:59' )
下面的语句返回 4: SELECT datediff( day,'1999/07/19 00:00','1999/07/23 23:59' )
下面的语句返回 0: SELECT datediff( month, '1999/07/19', '1999/07/23' )
下面的语句返回 1: SELECT datediff( month, '1999/07/19', '1999/08/23' )
‘贰’ sql有没有这样的函数.某一天是一个月的第几周
declare @StartDate varchar(10)
set @StartDate = '2012-05-01'
declare @EndDate varchar(10)
set @StartDate = '2012-10-01'
declare @SWeek int
declare @EWeek int
declare @weeks int
select @SWeek = Datepart(week,@StartDate)
select @EWeek = Datepart(week,@EndDate)
--最终的结果
Select @weeks = @EWeek - @SWeek + 1
--注意,此处两个日期需要为同一年份内,如果跨年,则需要折算年的周数!
‘叁’ sql 计算自然月周数按星期来计算,然后统计每周
没太理解你截图代码什么意思,我下面的例子可以通过输入年月得到该月份的总周数,使用的数据库是SQL SERVER 2005
DECLARE@yearint,@monthint,@tempdatadatetime,@sumdaymoney
SELECT@year=2015,@month=11
--先拼接成参数月份的第一天
SELECT@tempdata=convert(varchar(4),@year)+'-'+convert(varchar(2),@month)+'-01'
--统计参数月份总天数
SELECT@sumday=datediff(day,@tempdata,dateadd(month,1,@tempdata))
--计算参数月份一共几周
SEELCTceiling((@sumday-(casewhendatename(weekday,@tempdata)='星期一'then7.0
whendatename(weekday,@tempdata)='星期二'then6.0
whendatename(weekday,@tempdata)='星期三'then5.0
whendatename(weekday,@tempdata)='星期四'then4.0
whendatename(weekday,@tempdata)='星期五'then3.0
whendatename(weekday,@tempdata)='星期六'then2.0else1.0end))/7.0)+1
‘肆’ sql 怎么计算一个月里面有几个星期日
sqlserver中用 存储过程实现
CREATE PROCEDURE dayofmoth
@iyear int,
@imonth int,
@icount int output
AS
DECLARE @isleapyear int --
declare @dw int
declare @daycount int
declare @need5 int
if (@iyear % 4 = 0) and ((@iyear % 100 <> 0) or (@iyear % 400 = 0))
set @isleapyear =1
else
set @isleapyear =0
if ( @isleapyear =1)
set @daycount =29
else
set @daycount =28
if ( @imonth in (1,3,5,7,8,10,12))
set @daycount =31
if ( @imonth in(4,6,9,11))
set @daycount =30
set @dw = DATEPART(dw,CONVERT(char(4), @iyear)+'-'+CONVERT(char(2), @imonth)+'-01')
if (@dw= 1 )
set @need5 = 29
else
set @need5 = 28+9-@dw
if (@need5 <= @daycount )
set @icount = 5
else
set @icount =4
GO
========
测试代码 把上面的添加存储过程
下面的在查询分析器里执行
2007。9 有5天 8月4天
declare @iyear int
declare @imonth int
declare @daycount int
set @iyear =2007
set @imonth = 9
exec daycount1 @iyear,@imonth, @daycount output
select @daycount
‘伍’ sql 怎样计算一月内有几个星期天
这个还是有相当难度的加点分吧
sqlserver中用 存储过程实现
CREATE PROCEDURE dayofmoth
@iyear int,
@imonth int,
@icount int output
AS
DECLARE @isleapyear int --
declare @dw int
declare @daycount int
declare @need5 int
if (@iyear % 4 = 0) and ((@iyear % 100 <> 0) or (@iyear % 400 = 0))
set @isleapyear =1
else
set @isleapyear =0
if ( @isleapyear =1)
set @daycount =29
else
set @daycount =28
if ( @imonth in (1,3,5,7,8,10,12))
set @daycount =31
if ( @imonth in(4,6,9,11))
set @daycount =30
set @dw = DATEPART(dw,CONVERT(char(4), @iyear)+'-'+CONVERT(char(2), @imonth)+'-01')
if (@dw= 1 )
set @need5 = 29
else
set @need5 = 28+9-@dw
if (@need5 <= @daycount )
set @icount = 5
else
set @icount =4
GO
========
测试代码 把上面的添加存储过程
下面的在查询分析器里执行
2007。9 有5天 8月4天
declare @iyear int
declare @imonth int
declare @daycount int
set @iyear =2007
set @imonth = 9
exec daycount1 @iyear,@imonth, @daycount output
select @daycount
‘陆’ sql语句 查询一个月的几个周的数据
2012-05-01 到2012-05-31
第一周开始日期 2012-05-01
第一周结束日期 dateadd(day,7-datepart(weakday,'2012-05-01') +1,'2012-05-01')
第二周开始日期 dateadd(day,1,第一周结束日期)
第二周结束日期 dateadd(day,6,第二周开始日期)
.。。。。。
你可以用循环将一年的或者几年的周信息存在一个表里直接掉哟
‘柒’ 用Sql语句算出这个月有多少天这个月有多少个星期一
oracle中可以通过
SQL> select extract(day from last_day(sysdate)) from al;
EXTRACT(DAYFROMLAST_DAY(SYSDAT
------------------------------
31
得到当前月的总天数
如果要统计一个月有多个星期一,最好是用存储过程来实现
‘捌’ sql server如何计算一个月最多有多少天
具体方法如下:
--1.删除测试用表
IF OBJECT_ID(N'Test', N'U') IS NOT NULL
DROP TABLE Test
--2.建立测试表,并填充测试数据
SELECT * INTO Test
FROM
(
SELECT CONVERT(DATETIME, '2008-1-1', 120) AS dt UNION ALL SELECT '2008-1-15' UNION ALL SELECT '2008-1-31'
UNION ALL SELECT '2008-2-1' UNION ALL SELECT '2008-2-15' UNION ALL SELECT '2008-2-29'
UNION ALL SELECT '2007-2-1' UNION ALL SELECT '2007-2-15' UNION ALL SELECT '2007-2-28'
UNION ALL SELECT '2007-4-1' UNION ALL SELECT '2007-4-15' UNION ALL SELECT '2007-4-30'
) T
--3.根据日期计算当月有多少天
SELECT *
--当月天数=32-[(上月最后最后一天+32天)的日期值]
--e.g. '2008-1':32-day('2008-2-1') '2008-2':32-day('2008-3-3')
, ds1=32-DAY(dt-DAY(dt)+32)
--当月天数=当月最后一天的日期值
--e.g. '2008-1':day('2008-1-31') '2008-2':day('2008-2-29')
, ds2=DAY(DATEADD(mm,1,dt)-DAY(DATEADD(mm,1,dt)))
, ds3=DAY(DATEADD(mm, MONTH(dt), dt-DATEPART(dy,dt)))
, ds4=DAY(DATEADD(d, -1, CONVERT(VARCHAR(8), DATEADD(m,1,dt), 120)+'01'))
--当月天数=本月一号到下月一号的天数差值
--e.g. datediff(d, '2008-1-1', '2008-2-1')
, ds5=DATEDIFF(d, DATEADD(dd,1-DAY(dt),dt), DATEADD(mm, 1, DATEADD(dd,1-DAY(dt),dt)))
, ds6=DATEDIFF(d, DATEADD(m, DATEDIFF(m, 0, dt), 0), DATEADD(m, datediff(m, 0, dt)+1, 0))
, ds7=DATEDIFF(d, CONVERT(VARCHAR(8), dt, 120)+'01', CONVERT(VARCHAR(8), DATEADD(m,1,dt), 120)+'01')
from Test
‘玖’ pgsql怎么计算一个月有多少周
查2011年7月
select max(count1) - 1
from (SELECT count(1) count1
FROM DUAL
WHERE TO_CHAR(ADD_MONTHS(LAST_DAY(to_date('201107', 'yyyyMM')), -1) +
LEVEL,
'DAY') = '星期一'
CONNECT BY LEVEL <=
TO_CHAR(LAST_DAY(to_date('201107', 'yyyyMM')), 'DD')
union all
SELECT count(1) count1
FROM DUAL
WHERE TO_CHAR(ADD_MONTHS(LAST_DAY(to_date('201107', 'yyyyMM')), -1) +
LEVEL,
'DAY') = '星期日'
CONNECT BY LEVEL <=
TO_CHAR(LAST_DAY(to_date('201107', 'yyyyMM')), 'DD'))