tipo - obtener mes y año de una fecha sql
Dada una fecha, ¿cómo obtengo la primera y la última fecha de ese mes con el clásico asp (1)
Tengo un campo de fecha en la base de datos que almacena valores en formato mm / dd / aaa. Usando esto, ¿cómo puedo obtener el primer y el último día de una fecha determinada? Estoy usando este código para mostrar registros de la base de datos
<%
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") me da el nombre del día de la semana.
Ahora que tengo el código, edité la consulta para que pueda usar el primer día del mes y el último día del mes para mostrar los registros, pero no funciona, esto es lo que usé
<%
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
%>
si elimino "y la fecha ENTRE ''" & session ("firstDayOfMonth") & "'' AND ''" & session ("firstDayOfMonth") & "''" de la consulta muestra la primera y la última fecha ... pero quiero mostrar los registros usando firstdate y lastdate ... estoy malinterpretando algo en mi consulta en la parte superior ...
Puede calcular el primer día de la mitad muy fácilmente restando el número del día de la variable rs ("fecha").
Luego, para obtener el último día del mes, agrega 1 mes con la función dateadd () y el seguimiento restando un día:
firstDayOfMonth = rs("date") + 1 - day(rs("date"))
lastDayOfMonth = dateadd("m", 1, firstDayOfMonth ) - 1
Lo he configurado en tu código como un ejemplo a continuación:
<%
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
%>
Editar: si desea filtrar los datos del mes actual, puede cambiar su instrucción sql para agregar una WHERE date >= firstDayOfMonth AND date <= lastDayOfMonth
la siguiente manera:
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"
(Estoy seguro de que alguien podría reescribir esa consulta para no ser un desastre absoluto)