當前位置:首頁 » 編程語言 » sql一個月有多少星期
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql一個月有多少星期

發布時間: 2022-04-13 22:53:58

『壹』 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'))