我正在使用ASP的DateDiff()函数来查找两个日期之间的日期差异。
函数工作正常,并显示两个日期之间的确切日期差异,但是当在数据库中插入此值时,它会将9作为值,而不考虑任何日期差异。
假设两个日期之间的差异超过15或20天,数据库中的差异为“9”。
我使用INT作为显示日期差异的列的DATA TYPE。
DATA TYPE会在这里造成问题吗? 我甚至尝试使用会话变量来存储值但没有运气 - 这是我的代码:
if request.Form("sub") <> "" then
sql = "Select * from emp_leave_details"
rs.open sql , con, 1, 2
dim diff
dim todate
dim fromdate
fromdate= rs("leave_from")
todate= rs("leave_to")
session("date_diff")=datediff("d",fromdate,todate)
rs.addnew
rs("emp_name") = request.Form("name")
rs("emp_no") = request.Form("number")
rs("address") = request.Form("address")
rs("contact_no") = request.Form("contact")
rs("mobile_no") = request.Form("mobile")
rs("contact_onleave") = request.Form("contact_details")
rs("leave_type") = request.Form("rad")
rs("other_leave_details") = request.Form("PS")
rs("leave_from") = request.Form("from")
rs("leave_to") = request.Form("to")
rs("applied_by") = request.Form("apply")
rs("accepted_by") = request.Form("accept")
rs("approved_by") = request.Form("approve")
rs("no_of_leave_taken")= session("date_diff")
rs.update
response.Write("<script language='javascript'>{update();}</script>")
rs.close
end if
答案 0 :(得分:1)
数据类型与此无关。在会话中存储值不是解决方案。您可以使用常规变量。
在您的代码中,您似乎始终对fromdate
和todate
使用相同的值。这是因为您不迭代结果集中的行。
if not rs.bof and not rs.eof then
do while not rs.eof
'' code to execute for each row
rs.moveNext
loop
end if
在您当前的脚本中,rs
将始终返回查询返回的第一行的结果。
您遇到的第二个问题可能是Date
数据类型。使用cDate
将您的值转换为日期,并使用此值来计算差异。
答案 1 :(得分:0)
您的问题是,您搜索“select * from emp_leave_details”,它始终提供该表中的所有记录。您检索第一个记录的值并对这些值进行差异,这将导致始终相同的值,这是正常的。从你的问题来看,目前还不清楚你真正想做什么。我想如此想要选择像
这样的记录Select * from emp_leave_details where emp_name=<%=request.Form("name")%>
并在此基础上添加一个带有计算no_of_leave_taken的新记录。
答案 2 :(得分:0)
对不起伙计我的坏... 这是我调用的数据库字段名称而不是
fromdate= request.form("from")
todate= request.form("to")
我在说这个
fromdate= request.form("leave_from")
todate= request.form("leave_to")
再次抱歉..但我非常感谢大家为我提供所有可能的解决方案。
感谢。