如何在SQL中正确比较日期

本文关键字:比较 日期 SQL | 更新日期: 2023-09-27 17:57:47

我有以下代码,由于数据类型问题,我无法使其工作。我试着多次调整它,但我一直收到错误,比如

填充数据集时发生异常:
错误[07001][Oracle][ODBC][Ora]Ora-01008:不是所有变量都绑定了

经典ASP页面:

MyBool = MyProject.MyMethod(Request("ToDate")) //for example:"7/18/2017"

我的班级:

public bool MyMethod(string EndDate)
    {
        MyData data = new MyData();
        return (data.MyMethod(EndDate));
    }
public bool MyMethod(string EndDate)
    {
(...)
CreateCommand("SELECT * FROM MYTABLE WHERE Cast(StartDate as date) <= Cast(@EndDate as date)");
AddInParameter("EndDate", DbType.String, EndDate);

我的桌子:

STARTDATE [VARCHAR2(10) NULL]

对于在这种情况下应该如何处理数据类型和/或修改SQL命令,我将不胜感激。

这是在AddInParameter()中执行的内容:

DbParameter parameter = providerFactory.CreateParameter();
parameter.ParameterName = FormatParameterName("EndDate"); 
parameter.DbType = type; //(DbType type = String)
parameter.Value = value; //(Object value = "7/18/2017")
parameter.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter);

如何在SQL中正确比较日期

如果StartDate和EndDate列是字符类型,请将其更改为DateTime。字符类型列(如varchar、nvarchar等)用于字符,日期时间类型列用于日期时间。

将DateTime保存为字符串是没有意义的。

作为旁注;在C#中的DateTime中没有任何隐式格式。它只是一个包含时间片段的值。它的字符串表示有格式

如果您想保持列类型不变,则需要执行以下操作:EndDate.ToString("MM/dd/yyyy g", CultureInfo.InvariantCulture); // Displays 08/04/0070 A.D.