Учитывая дату, как мне получить первую и последнюю дату этого месяца, используя классический asp

У меня есть поле даты в базе данных, в котором хранятся значения в формате мм/дд/гггг. Используя это, как я могу получить первый и последний день заданной даты. Я использую этот следующий код для отображения записей из базы данных

<%
sql="select * from order_details where emp_name='"&session("emp")&"' order by 1,2,3,4,5,6,7"
        rs.open sql,con,1,2
        do while not rs.eof
        session("wk")=weekdayname(weekday((rs("date"))))
    %>
<tr>

    <td align="center"><%=rs("emp_name")%></td>
    <td align="center"><%=rs("food_had")%></td>
    <td align="center"><%=rs("quantity")%></td>
    <td align="center"><%=session("wk")%></td>
    <td align="center"><%=day(rs("date"))&"/"&month(rs("date"))&"/"&year(rs("date"))%></td>
    <td align="center"><%=rs("grand_total")%></td>

</tr>
<%
        rs.movenext
        loop
        rs.close
%>

session("wk") дает мне название дня недели.

Теперь, когда у меня есть код, я отредактировал запрос, чтобы я мог использовать первый день месяца и последний день месяца для отображения записей, но он не работает, это то, что я использовал

<%
sql="select * from order_details where emp_name='"&session("emp")&"' and date BETWEEN '"&session("firstDayOfMonth")&"' AND '"&session("firstDayOfMonth")&"'"
        rs.open sql,con,1,2
        do while not rs.eof
        session("m")=monthname(month((rs("date"))))
        session("firstDayOfMonth") = rs("date") + 1 - day(rs("date"))
        session("lastDayOfMonth") = dateadd("m", 1, session("firstDayOfMonth") ) - 1
    %>   
<tr>   

    <td align="center"><%=rs("emp_name")%></td>   
    <td align="center"><%=rs("food_had")%></td>   
    <td align="center"><%=rs("quantity")%></td>   
    <td align="center"><%=session("wk")%></td>   
    <td align="center"><%=day(rs("date"))&"/"&month(rs("date"))&"/"&year(rs("date"))%></td>   
    <td align="center"><%=rs("grand_total")%></td> 
    <td align="center"><%=session("firstDayOfMonth")%></td>   
    <td align="center"><%=session("lastDayOfMonth")%></td> 


</tr>
<%
        rs.movenext
        loop
        rs.close
    %>

если я удаляю "и дату МЕЖДУ '"&session("firstDayOfMonth")&"' AND '"&session("firstDayOfMonth")&"'" из запроса, показывает первую и последнюю дату.. .но я хочу отображать записи, используя firstdate и lastdate... я что-то упускаю в своем запросе сверху..


person Leroy Mikenzi    schedule 18.05.2012    source источник


Ответы (1)


Вы можете довольно легко вычислить firstDayOfMonth, вычитая номер дня из переменной rs("date").

Затем, чтобы получить последний день месяца, вы добавляете 1 месяц с помощью функции dateadd() и затем вычитаете день:

        firstDayOfMonth = rs("date") + 1 - day(rs("date"))
        lastDayOfMonth = dateadd("m", 1, firstDayOfMonth ) - 1

Я установил это в вашем коде в качестве примера ниже:

<%   
sql="select * from order_details where emp_name='"&session("emp")&"' order by 1,2,3,4,5,6,7"   
        rs.open sql,con,1,2   
        do while not rs.eof   
        session("wk")=weekdayname(weekday((rs("date"))))   
        firstDayOfMonth = rs("date") + 1 - day(rs("date"))
        lastDayOfMonth = dateadd("m", 1, firstDayOfMonth ) - 1
    %>   
<tr>   

    <td align="center"><%=rs("emp_name")%></td>   
    <td align="center"><%=rs("food_had")%></td>   
    <td align="center"><%=rs("quantity")%></td>   
    <td align="center"><%=session("wk")%></td>   
    <td align="center"><%=day(rs("date"))&"/"&month(rs("date"))&"/"&year(rs("date"))%></td>   
    <td align="center"><%=rs("grand_total")%></td> 
    <td align="center"><%=fdate(firstDayOfMonth) ></td>   
    <td align="center"><%=fdate(lastDayOfMonth) ></td> 

</tr>   
<%   
        rs.movenext   
        loop   
        rs.close   
%>   

Изменить. Если вы хотите отфильтровать данные за текущий месяц, вы можете изменить свой оператор sql, добавив предложение WHERE date >= firstDayOfMonth AND date <= lastDayOfMonth, подобное следующему:

 sql="select * from order_details where emp_name='" & session("emp") & "' " & _ 
     "WHERE date >= DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE())) + 1 - DAY(DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))) " &_
     "AND date <= DATEADD(MONTH, 1, DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE())) + 1 - DAY(DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE())))) - 1 " &_
     "order by 1,2,3,4,5,6,7" 

(Я уверен, что кто-то мог бы переписать этот запрос, чтобы он не был абсолютным беспорядком)

person nvuono    schedule 18.05.2012
comment
как я могу отображать записи, используя firstDayOfMonth и lastDayOfMonth - person Leroy Mikenzi; 18.05.2012
comment
Если вы хотите использовать беспорядочный SQL-запрос, вы можете проверить мой обновленный ответ. - person nvuono; 18.05.2012
comment
я не могу использовать это как часть моего запроса для отображения записей. Пожалуйста, проверьте мой вопрос, который я отредактировал. - person Leroy Mikenzi; 18.05.2012