我想使用MySQL根据两个不同的日期过滤一些项目。在我的数据库中,我存储了2017-03-28 10:55:10
之类的数据。但我只需要日期部分,而不是时间所以我使用了DATE()
函数:
select sum(cashamount) as sumcashsalesamount,
DATE(transactiondate) as datepart
from master_transaction
where transactiondate BETWEEN '2017-02-22%' AND '2017-03-28%'
order by transactiondate desc
此查询上方有两个日期2017-02-22%
和2017-03-28%
,但这不会返回任何结果。
但是当我将此2017-03-28%
日期更改为2017-03-29%
(明天日期)时,我会得到结果。
答案 0 :(得分:4)
不要将between
与"日期"一起使用。我把它放在引号中,因为你的值实际上是日期时间值。
写这个条件的最好方法是:
where transactiondate >= '2017-02-22' and
transactiondate < '2017-03-29'
注意第二个条件的不等式。 BETWEEN
具有包容性,因此将包括2017-03-28的午夜。
为什么这是最好的?
date
和datetime
类型。答案 1 :(得分:2)
BETWEEN
包含双方,如果没有为日期指定时间组件,则默认为00:00:00
。自2017-03-28 10:55:10
&gt; 2017-03-28 00:00:00
它未包含在结果集中。
答案 2 :(得分:1)
2017-03-28%
= 2017-03-28 00:00:00
如果当天发生了某些事情,您需要2017-03-28 23:59:59
或date_sub(2017-03-29, INTERVAL 1 second)
才能轻松
答案 3 :(得分:1)
您只能对LIKE使用通配符(%)。
使用:
where date(transactiondate) BETWEEN '2017-02-22' AND '2017-03-28'
答案 4 :(得分:0)
如果您在今天之间使用并且想要今天,那么您必须整天明天
答案 5 :(得分:0)
我解决了我的问题
Option Explicit
Sub SendFiles()
Dim objOutLook As Object
Dim fso As Object
Dim strFile As String
Dim fsoFile
Dim fsoFldr
Dim dtNew As Date, sNew As String
Dim newOutlookInstance As Boolean
Set fso = CreateObject("Scripting.FileSystemObject")
If GetOutlook(objOutLook, newOutlookInstance) Then
strFile = "C:\temp\" 'path to folder
Set fsoFldr = fso.GetFolder(strFile)
dtNew = Now() - TimeValue("00:00:30") '30 seconds ago
For Each fsoFile In fsoFldr.Files
If fsoFile.DateCreated > dtNew Then
sNew = fsoFile.Path
With objOutLook.CreateItem(olMailItem)
.To = "email@address.com"
.Subject = "Example"
.BodyFormat = olFormatPlain
.Attachments.Add sNew
.Importance = olImportanceHigh
.Send
End With
End If
Next
If newOutlookInstance Then objOutLook.Quit '<--| quit Outlook if an already running instance of it hasn't been found
Set objOutLook = Nothing
Else
MsgBox "Sorry: couldn't get a valid Outlook instance running"
End If
End Sub
Function GetOutlook(objOutLook As Object, newOutlookInstance As Boolean) As Boolean
Set objOutLook = GetObject(, "Outlook.Application")
If objOutLook Is Nothing Then
Set objOutLook = New Outlook.Application
newOutlookInstance = True
End If
GetOutlook = Not objOutLook Is Nothing
End Function
我只是将DATE(transactiondate)重新放置在条件有效的地方