关于拼凑的字符串转换为日期的问题
先放上我的存储过程代码:
描述:
我先从spa_UserFestival表里查出满足相关天数的记录,然后再到另一张表里查找有没有相关的记录,最后返回一个逗号分隔的ID列表。
因为用户输入不会选择年份,只会选择月份和日期,这样一来就没办法判断日期的合法性了,有规律的1\3\5\7\8\10\12这种月份还好说,2月份只能和当前年份加在一起才能判断。
我在spa_UserFestival只设置了FestivalMonth和FestivalDay两个字段用来存储用户选择的月份和日期,然后加上当前年的年份,再进行日期转换。
问题:
还是2月份天数的问题,如果用户选择的是2月29日,再加上今年的年份,肯定会出错,因为今年是没有29日的,我想用TRY CATCH块来处理一下,但好象不行。
不知道应该怎样去处理一下。
/****** Object: StoredProcedure [dbo].[Pro_spa_GETSendUser] Script Date: 06/28/2013 16:51:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[Pro_spa_GETSendUser]
(
@DiffDay int,
@FestivalIDLIST NVARCHAR(1000) OUT
)
AS
DECLARE @COUNT1 int
--查找与截止日期天数相等的所用待发用户数并赋值
SELECT @COUNT1 = COUNT(*)
FROM [spa_UserFestival]
WHERE DATEDIFF(D,GETDATE(),CONVERT(datetime2,CONVERT(nvarchar,YEAR(getdate()))+ FestivalMonth + FestivalDay)) = @DiffDay
--如果数量大于0,则循环游标,查找有没有已经发送过的短信,如果没有找到,则进行发送
IF @COUNT1 > 0
DECLARE @UserID int
DECLARE @FestivalID INT
DECLARE @FestivalIDLIST_Temp NVARCHAR(1000) = ''
--游标
DECLARE vend_cursor CURSOR LOCAL SCROLL
FOR SELECT FestivalID,UserID FROM spa_UserFestival
WHERE DATEDIFF(D,GETDATE(),CONVERT(datetime2,CONVERT(nvarchar,YEAR(getdate()))+ FestivalMonth + FestivalDay)) = @DiffDay
OPEN vend_cursor
FETCH NEXT FROM vend_cursor INTO @FestivalID,@UserID
WHILE @@FETCH_STATUS = 0
BEGIN
--PRINT @FestivalID
--执行检查,看是否已经发送过短信
DECLARE @Count2 INT
SELECT @Count2 = COUNT(*) FROM spa_SendMsg
WHERE UserID = @UserID AND FestivalID = @FestivalID AND FestivalType = 1
IF @Count2 <= 0
BEGIN
SET @FestivalIDLIST_Temp = @FestivalIDLIST_Temp + CONVERT(nvarchar,@FestivalID) + ','
END
FETCH NEXT FROM vend_cursor INTO @FestivalID,@UserID
END
CLOSE vend_cursor
DEALLOCATE vend_cursor
SET @FestivalIDLIST = @FestivalIDLIST_Temp
GO
描述:
我先从spa_UserFestival表里查出满足相关天数的记录,然后再到另一张表里查找有没有相关的记录,最后返回一个逗号分隔的ID列表。
因为用户输入不会选择年份,只会选择月份和日期,这样一来就没办法判断日期的合法性了,有规律的1\3\5\7\8\10\12这种月份还好说,2月份只能和当前年份加在一起才能判断。
我在spa_UserFestival只设置了FestivalMonth和FestivalDay两个字段用来存储用户选择的月份和日期,然后加上当前年的年份,再进行日期转换。
问题:
还是2月份天数的问题,如果用户选择的是2月29日,再加上今年的年份,肯定会出错,因为今年是没有29日的,我想用TRY CATCH块来处理一下,但好象不行。
不知道应该怎样去处理一下。
...全文
相关推荐
MySQL日期时间函数[项目源码]
接下来,文章深入探讨了日期和时间的转换函数。date_format()函数用于将日期或时间格式化为字符串,而str_to_date()函数则将字符串转换为日期或时间值。
韩顺平老师Utiity文件分享
其中涵盖字符串处理工具类,提供空值安全的trim、isEmpty、isBlank、substring、replace、format等方法,支持Unicode编码识别与多编码格式兼容处理;提供日期时间工具类
C程序小游戏实例(共享下)
此外,由于日期往往以字符串形式展示,这个程序还可能涉及字符串的处理。通过学习这个实例,初学者可以进一步提升日期处理、循环控制以及字符串操作的技能。
基恩士VT5触摸屏笔记.doc
我们可以使用局部窗口来打开伺服点动窗口,或者调用字符串键盘。在设计局部窗口时,需要注意关闭问题,可以设置标题栏关闭按钮。三、报警记录的设置在基恩士 VT5 触摸屏中,报警记录是通过报警变量来实现的。
django模型动态修改参数,增加 filter 字段的方式
`DateField`: 存储日期,格式为YYYY-MM-DD。5. `DateTimeField`: 存储日期和时间,格式为YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]。


疑难问题
