如何在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);
如果StartDate和EndDate列是字符类型,请将其更改为DateTime。字符类型列(如varchar、nvarchar等)用于字符,日期时间类型列用于日期时间。
将DateTime保存为字符串是没有意义的。
作为旁注;在C#中的DateTime中没有任何隐式格式。它只是一个包含时间片段的值。它的字符串表示有格式。
如果您想保持列类型不变,则需要执行以下操作:EndDate.ToString("MM/dd/yyyy g", CultureInfo.InvariantCulture); // Displays 08/04/0070 A.D.