我想在SQLServer里面得到某年某月有多少天,有这样的函数吗?谢谢

Iris 2003-09-13 10:10:10
我想在SQLServer里面得到某年某月有多少天,有这样的函数吗?谢谢
...全文
207 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
st_2000 2003-09-14
  • 打赏
  • 举报
回复
同意:
declare @年月 varchar(6)
set @年月='200302' --查询2003年2月有多少天
select day(dateadd(month,1,@年月+'01')-1)
zjcxc 元老 2003-09-14
  • 打赏
  • 举报
回复
如果定义成函数,就用:

create function f_getday(@年月 varchar(6))
returns int
as
begin
return(select day(dateadd(month,1,@年月+'01')-1))
end
go

--调用
select dbo.f_getday('200301'),dbo.f_getday('200302')

--删除函数
drop function f_getday
zjcxc 元老 2003-09-14
  • 打赏
  • 举报
回复
一条语句就行了吧.

declare @年月 varchar(6)
set @年月='200302' --查询2003年2月有多少天
select day(dateadd(month,1,@年月+'01')-1)
zarge 2003-09-14
  • 打赏
  • 举报
回复
CREATE FUNCTION 返回月天数(@YY CHAR(4), @MM CHAR(2))
RETURNS INT
AS
BEGIN
DECLARE @MyDate smalldatetime
SET @MyDate = CAST(@YY + '-' + @MM + '-01' AS smalldatetime)
RETURN 32 - Day(@MyDate + (32 - Day(@MyDate)))
END
yujohny 2003-09-14
  • 打赏
  • 举报
回复

下面这个函数就可以了
CREATE FUNCTION 返回月天数(@YY CHAR(4), @MM CHAR(2))
RETURNS INT
AS
BEGIN
DECLARE @Riqi DATETIME,@I INT
SET @MM=CONVERT(CHAR(2),CONVERT(INT,@MM)+1)
SET @Riqi = dateadd(day,-1,CONVERT(DATETIME,@YY+'-'+@MM+'-01'))
SET @I =CAST(datepart(day,@Riqi) AS INT)
return @I
END

select dbo.返回月天数('2003','8') 结果31
select dbo.返回月天数('2003','2') 结果28
ltf1980 2003-09-14
  • 打赏
  • 举报
回复
使用sql的datediff函数
DATEDIFF ( datepart , startdate , enddate )
datepart 参数使用day

startdate 为某年某月的第一天,enddate 为某年某月的下个月(或年)的第一天

USE pubs
GO
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles
GO

shentj 2003-09-14
  • 打赏
  • 举报
回复
SELECT DATEDIFF(DY,CAST(YEAR(GETDATE()) AS VARCHAR(4))+'/01/01', CAST(YEAR(GETDATE())+1 AS VARCHAR(4)) + '/01/01')
返回某年的天数
------------------------------
select datediff(dd,'2003/5/1','2003/6/1')
返回某月的天数
aierong 2003-09-14
  • 打赏
  • 举报
回复



select day(dateadd(day,-1,dateadd(mm,1,'20030201')))
aierong 2003-09-14
  • 打赏
  • 举报
回复



DATEDIFF
返回跨两个指定日期的日期和时间边界数。

语法
DATEDIFF ( datepart , startdate , enddate )


例如:求今年2月份有多少天
declare @t smalldatetime
select @t='2003-2-01'
select datediff(day,@t,dateadd(Month,1,@t)) as 该月有


tanbi52 2003-09-13
  • 打赏
  • 举报
回复
没有,不过也不用了,就在程序里判断好了
TDate date1;

try
{
date1=StrToDateTime(edtextyearmonth+"/31");.//edtextyearmonth为年和月
ShowMessage("31天")
}
catch(...)
{
try
{
date1=StrToDateTime(edtextyearmonth+"/30");.//edtextyearmonth为年和月
ShowMessage("30天")
}
catch(...)
{
try
{
date1=StrToDateTime(edtextyearmonth+"/29");.//edtextyearmonth为年和月
ShowMessage("29天")
}
catch(...)
{
try
{
date1=StrToDateTime(edtextyearmonth+"/29");.//edtextyearmonth为年和月
ShowMessage("29天")
}
catch(...)
{
}
}
}
}
}
klbt 2003-09-13
  • 打赏
  • 举报
回复
现成的没有,建议自己写。

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧