到期目的的日期间隔

时间:2014-07-13 14:56:18

标签: sql vb.net

我试图列出所有即将在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

1 个答案:

答案 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'

请注意,这些也有时间组件,但通常很容易摆脱(以数据库特定的方式)。