Цитата: John Doe ➤ Кто предложит самое изящное решение задачи?
Условие: необходимо выводить в запросе 'YES' если sysdate в интервале от 18 до 9 часов :)
насчет "изящного" решения не претендую, но в свое время так же пытлся все сделать одним запросом - успеха особого не принесло - не было универсальности - работало либо от 18 до 9 либо от 9 до 18 - плюнул на это дело и написал ф-цию, которую вставляю в запрос в условие
на входе интервал - на выходе попали\не попали - ф-ция на vba, но адаптировать проблем наверное не будет
Public Function m_TimeInterval(swT1 As String, swT2 As String) As Boolean
On Error Resume Next
Dim swD1 As Date, swD2 As Date, swD3 As Date, swD As Date, swCHANGE As Boolean
swCHANGE = False
swD = CDate(Format$(Now(), "hh:nn"))
swD1 = CDate(swT1)
swD2 = CDate(swT2)
If swD2 < swD1 Then
swCHANGE = True
swD3 = swD2
swD2 = swD1
swD1 = swD3
End If
If swCHANGE = False Then
If swD > swD1 And swD < swD2 Then
m_TimeInterval = True
Else
m_TimeInterval = False
End If
Else
If swD > swD1 And swD < swD2 Then
m_TimeInterval = False
Else
m_TimeInterval = True
End If
End If
End Function
плюсом получилось что использовать можно отдельно от запроса - т.е. сам запрос запускать предварительно проверив условие - меньше накладных расходов