風雲論壇后台开发 → 浏览:帖子主题
分页: 1 2 3, 共 3 页
* 帖子主题:从ACCESS转为MSSQL后,遇到一个闰年2000-2-29日期问题
風雲 (ID: 3)
头衔:论坛版主
等级:天使
积分:1373
发帖:60
来自:保密
注册:2022/3/30 15:28:53
造访:2024/5/3 6:15:31
[ 第 13 楼 ] 回复
是的,用 pgsql 测试的时候用来构造测试数据。
2023/11/24 14:55:05 IP:已设置保密
tian (ID: 45)
等级:精灵
积分:122
发帖:6
来自:保密
注册:2023/11/24 9:14:32
造访:2024/2/17 9:58:19
[ 第 14 楼 ] 回复
风云,把你写的代码放到ASP文件后提示when附近有语法错误。
暂时解决方法:
把用户提交的特殊农历生日如xxxx-2-29  xxxx-2-30,入库前更改为xxxx-2-28。
这样每年都会在农历2-28发送生日邮件提醒。
2023/11/25 21:58:10 IP:已设置保密
風雲 (ID: 3)
头衔:论坛版主
等级:天使
积分:1373
发帖:60
来自:保密
注册:2022/3/30 15:28:53
造访:2024/5/3 6:15:31
[ 第 15 楼 ] 回复
风云,把你写的代码放到ASP文件后提示when附近有语法错误。
那个 SQL 语句我是在 SQL Server 2016 上测试的。

2-29 还有可能是合法的日期,2-30 就完全不存在了,这个需要在入库前校验。
2023/11/25 22:05:36 IP:已设置保密
tian (ID: 45)
等级:精灵
积分:122
发帖:6
来自:保密
注册:2023/11/24 9:14:32
造访:2024/2/17 9:58:19
[ 第 16 楼 ] 回复
我是在SQL2005下, 用ASP文件测试2000-2-29出错。
2023/11/25 22:10:52 IP:已设置保密
風雲 (ID: 3)
头衔:论坛版主
等级:天使
积分:1373
发帖:60
来自:保密
注册:2022/3/30 15:28:53
造访:2024/5/3 6:15:31
[ 第 17 楼 ] 回复
屏幕截图 2023-11-25 221050.jpg
2023/11/25 22:12:06 IP:已设置保密
tian (ID: 45)
等级:精灵
积分:122
发帖:6
来自:保密
注册:2023/11/24 9:14:32
造访:2024/2/17 9:58:19
[ 第 18 楼 ] 回复
nongli
XXX-2-29
1990-5-18
2000-12-12

其实想在打开ASP文件语句查询时,里面判断,14天内过生日的人数,当遇到XXX-2-29(如2000-2-29  2000-2-30),改为XXXX-2-28,就不会出现错误了。不知道怎么加

sql="select count(*) as ttshu from shengri where (user="&session("user")&" and gongnong=0 and DateDiff(day,getdate(),dateadd(year,DateDiff(year,birthday,getdate()),birthday))between 0 and 14) or (user="&session("user")&" and gongnong=1  and shengrin<>'2-29' and shengrin<>'2-30' and DateDiff(day,'"&(jinnongli)&"',dateadd(year,DateDiff(year,nongli,'"&(jinnongli)&"'),nongli))between 0 and 14)"
2023/11/25 22:20:44 IP:已设置保密
風雲 (ID: 3)
头衔:论坛版主
等级:天使
积分:1373
发帖:60
来自:保密
注册:2022/3/30 15:28:53
造访:2024/5/3 6:15:31
[ 第 19 楼 ] 回复
看到了一个 user 条件,你这个是查询某个用户最近14天内是否公历或农历生日吗?
2023/11/25 22:35:16 IP:已设置保密
tian (ID: 45)
等级:精灵
积分:122
发帖:6
来自:保密
注册:2023/11/24 9:14:32
造访:2024/2/17 9:58:19
[ 第 20 楼 ] 回复
是的。 ASP网站,有一个栏目是生日, 用户可以提交亲人朋友的阳历或农历生日,当最近14天内的亲人朋友有过生日的,会在首页提示过生日的人数。并且生日当天会自动发送邮件提醒(每天早上定时计划任务打开ASP文件,检索符合条件发送邮件)

gongnong=0  表示阳历生日
gongnong=1  表示农历生日

jinnongli 今天的农历日期    格式如2023-10-13

nongli    用户提交的农历生日 格式如2000-2-18

shengrin  用户提交的农历生日 格式如2-18

birthday  用户提交的阳历生日 格式如2023-11-25


shengrin<>'2-29' and shengrin<>'2-30' 本来想用这个排除2-29  2-30,没效果。 
2023/11/25 22:43:10 IP:已设置保密
風雲 (ID: 3)
头衔:论坛版主
等级:天使
积分:1373
发帖:60
来自:保密
注册:2022/3/30 15:28:53
造访:2024/5/3 6:15:31
[ 第 21 楼 ] 回复
这样可以起到格式化 shengrin 的效果:
case when shengrin in ('2-29', '2-30') then '2-28' else shengrin end
2023/11/25 22:50:05 IP:已设置保密
tian (ID: 45)
等级:精灵
积分:122
发帖:6
来自:保密
注册:2023/11/24 9:14:32
造访:2024/2/17 9:58:19
[ 第 22 楼 ] 回复
sql="select count(*) as ttshu from shengri where (user="&session("user")&" and gongnong=0 and DateDiff(day,getdate(),dateadd(year,DateDiff(year,birthday,getdate()),birthday))between 0 and 14) or (user="&session("user")&" and gongnong=1  and shengrin<>'2-29' and shengrin<>'2-30' and (case when shengrin in ('2-29', '2-30') then '2-28' else shengrin end)and DateDiff(day,'"&(jinnongli)&"',dateadd(year,DateDiff(year,nongli,'"&(jinnongli)&"'),nongli))between 0 and 14)"

改成上面后,提示:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]在应使用条件的上下文(在 'and' 附近)中指定了非布尔类型的表达式。
2023/11/25 22:54:08 IP:已设置保密
風雲 (ID: 3)
头衔:论坛版主
等级:天使
积分:1373
发帖:60
来自:保密
注册:2022/3/30 15:28:53
造访:2024/5/3 6:15:31
[ 第 23 楼 ] 回复
我没看懂你为什么要加shengrin这个条件。好像也有没有去拼接 2023-2-30 这样的非法日期啊。
2023/11/25 23:01:40 IP:已设置保密
tian (ID: 45)
等级:精灵
积分:122
发帖:6
来自:保密
注册:2023/11/24 9:14:32
造访:2024/2/17 9:58:19
[ 第 24 楼 ] 回复
加这个,是因为之前使用ACCESS数据库好像有效果,就是过滤掉2-29  2-30的数据
shengrin过滤了,也就过滤掉了nongli字段包含xxxx-2-29  xxxx-2-30的数据了。
2023/11/25 23:04:25 IP:已设置保密
分页: 1 2 3, 共 3 页
快速回复主题
账号/密码
用户: 没有注册? 密码:
评论内容