我有以下问题:无法获得sql查询与日期的工作。以下查询:
strRowSource = "SELECT [ID],[TaskType],[TaskName],[StartDate],[EndDate],[isFinished] " & _
"FROM tblTasks " & "WHERE [Person] = " & TempVars("CurrentUser") & " AND [EndDate] < #" & Format(Now(), "short date") & "#"
不返回任何值。我想要的是已经过期的任务列表。
Thanks in advance
我正在使用这个方便的函数来格式化日期:
Public Function JetSqlDate(ByVal d As Variant) As String
If IsNull(d) Then
JetSqlDate = "NULL"
Else
JetSqlDate = Format$(d, "#mm/dd/yyyy hh:nn:ss#")
End If
End Function
用法:
strRowSource = "SELECT ID, TaskType, TaskName, StartDate, EndDate, isFinished " & _
"FROM tblTasks WHERE Person = " & TempVars("CurrentUser") & _
" AND EndDate < " & JetSqlDate(Now())
注意,转义列名([]
)仅在包含无效字符(如空格)或与关键字冲突时才需要。例如,如果您有一个名为From
的列,则必须将其写成[From]
。
对于SQL-Server直通查询,我使用:
Public Function TSqlDate(ByVal d As Variant) As String
If IsNull(d) Then
TSqlDate = "NULL"
Else
TSqlDate = "{ ts '" & Format$(d, "yyyy-mm-dd hh:nn:ss") & "' }"
End If
End Function
为字符串:
Public Function SqlStr(ByVal s As String) As String
'Input: s="" Returns: NULL
'Input: s="abc" Returns: 'abc'
'Input: s="x'y" Returns: 'x''y'
If s = "" Then
SqlStr = "NULL"
Else
SqlStr = "'" & Replace(s, "'", "''") & "'"
End If
End Function
注意,该函数添加分隔符并转义字符串值中包含的任何分隔符。这使得查询更可靠,也可以防止SQL注入。
你可以把它缩减为:
strRowSource = "SELECT ID, TaskType, TaskName, StartDate, EndDate, isFinished " & _
"FROM tblTasks " & _
"WHERE Person = " & TempVars("CurrentUser") & " AND EndDate < Now()"