我试图列出所有即将在90天内到期的药物,但我收到语法错误,任何人都可以告诉我。
Try
If (Me.conn.State = ConnectionState.Closed) Then
Me.conn.Open()
End If
Dim da As New SqlDataAdapter(("
select
ItemNo,Name,ManufacturerName,MedicineName,BatchNo,MedicineLocation,
CostPrice,SellPrice,QtyAvailable,ExpiryDate,StockValue
from ItemTypes,Items
where ItemTypes.ItemTypesId=Items.ItemTypesId
and ExpiryDate> '" & Strings.Format(DateAndTime.Now) & "' + INTERVAL 90 DAY "), conn)
Dim dataSet As New DataSet
Dim dt As New DataTable
da.Fill(dataSet, "dt")
Me.dgrdItems.DataSource = dataSet.Tables.Item(0)
Catch exception1 As Exception
ProjectData.SetProjectError(exception1)
Dim exception As Exception = exception1
Interaction.MsgBox(exception.Message, MsgBoxStyle.Critical, Nothing)
ProjectData.ClearProjectError()
End Try
答案 0 :(得分:1)
我的猜测是您使用的数据库不理解interval
。以下是在SQL Server中表达此查询的方法:
select ItemNo, Name, ManufacturerName, MedicineName, BatchNo, MedicineLocation,
CostPrice, SellPrice, QtyAvailable, ExpiryDate, StockValue
from ItemTypes join
Items
on ItemTypes.ItemTypesId = Items.ItemTypesId
where ExpiryDate > getdate() + 90;
这有两个变化。首先,它使用显式join
语法,而不是where
子句中隐式连接的古老语法。其次,它在数据库中进行日期比较。
以下是其他一些数据库的where
逻辑:
MySQL的:
where ExpiryDate > now() + interval 90 day
甲骨文:
where ExpiryDate > sysdate + 90
Postgres的:
where ExpiryDate > now() + interval '90 days'
请注意,这些也有时间组件,但通常很容易摆脱(以数据库特定的方式)。