Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择查询:我只希望DateTime中的日期部分用于筛选行_C#_Mysql_Sql_Datetime - Fatal编程技术网

C# 选择查询:我只希望DateTime中的日期部分用于筛选行

C# 选择查询:我只希望DateTime中的日期部分用于筛选行,c#,mysql,sql,datetime,C#,Mysql,Sql,Datetime,我有表xxx(,,,,);其中一列具有DateTime数据类型(例如Login\u date) 登录日期的值如下:“2013年11月27日下午3:12:07” 我的问题是 我想选择表xxx中登录日期为2013年11月27日的行 我在执行这样的查询时出错 DateTime dt=new DateTime(); dt=DateTime.Now; Command Query is: " SELECT * FROM xxx WHERE (Login_Date=@date) " cmd.Par

我有表xxx(,,,,);其中一列具有DateTime数据类型(例如Login\u date

登录日期的值如下:
“2013年11月27日下午3:12:07”

我的问题是

我想选择表xxx中登录日期为2013年11月27日的行 我在执行这样的查询时出错

DateTime dt=new DateTime();
dt=DateTime.Now;
Command Query is:      " SELECT * FROM xxx WHERE (Login_Date=@date)  "
cmd.Parameters.add("@date",dt);

This is not selecting any rows from table xxx.
这不起作用,因为时间不同

&这里我使用的是MYSQL数据库 请帮我解决这个问题。

试试这个:

dt.ToString("dd-MMM-yy")
DateTime dt = DateTime.Now;

var cmd = new SqlCommand("SELECT * FROM xxx WHERE (DATEADD(dd, 0, DATEDIFF(dd, 0, Login_Date)) = DATEADD(dd, 0, DATEDIFF(dd, 0, @date)))");
cmd.Parameters.add("@date", dt);
DateTime dt=DateTime.Today; // Note Today, not Now
Command Query is:      
"SELECT * FROM xxx WHERE Login_Date>=@date AND Login_Date < DATEADD(d,1,@date)"
cmd.Parameters.add("@date",dt);
因此,在添加参数时:

cmd.Parameters.add("@date",dt.ToString("dd-MMM-yy"));
尝试转换(datetime,cast(登录日期为varchar(12)),103)='27-Nov-13'

我总是发现DateTime上的以下页面是一个很好的资源:

试试这个:

dt.ToString("dd-MMM-yy")
DateTime dt = DateTime.Now;

var cmd = new SqlCommand("SELECT * FROM xxx WHERE (DATEADD(dd, 0, DATEDIFF(dd, 0, Login_Date)) = DATEADD(dd, 0, DATEDIFF(dd, 0, @date)))");
cmd.Parameters.add("@date", dt);
DateTime dt=DateTime.Today; // Note Today, not Now
Command Query is:      
"SELECT * FROM xxx WHERE Login_Date>=@date AND Login_Date < DATEADD(d,1,@date)"
cmd.Parameters.add("@date",dt);
这样我们只比较日期而不比较时间。

尝试以下方法:

dt.ToString("dd-MMM-yy")
DateTime dt = DateTime.Now;

var cmd = new SqlCommand("SELECT * FROM xxx WHERE (DATEADD(dd, 0, DATEDIFF(dd, 0, Login_Date)) = DATEADD(dd, 0, DATEDIFF(dd, 0, @date)))");
cmd.Parameters.add("@date", dt);
DateTime dt=DateTime.Today; // Note Today, not Now
Command Query is:      
"SELECT * FROM xxx WHERE Login_Date>=@date AND Login_Date < DATEADD(d,1,@date)"
cmd.Parameters.add("@date",dt);
DateTime dt=DateTime.Today;//注意今天,而不是现在
命令查询是:
“从xxx中选择*,其中登录日期>=@日期和登录日期<日期添加(d,1,@日期)”
cmd.Parameters.add(“@date”,dt);
在这样的查询中使用日期范围比强制转换到日期更有效,因为它使您能够利用DATETIME列上可能存在的任何索引。

尝试下面的查询

从xxx中选择*,其中(转换(日期,登录日期,101))=convert(日期,@date,101)

这应该可以

CREATE TABLE #tabledates ( dt DATETIME )

INSERT  INTO #tabledates
        ( dt )
VALUES  ( '2013-11-27 10:30:07' )

INSERT  INTO #tabledates
        ( dt )
VALUES  ( '2013-11-27 10:30:07' )

INSERT  INTO #tabledates
        ( dt )
VALUES  ( '2013-11-28 10:30:07' )

INSERT  INTO #tabledates
        ( dt )
VALUES  ( '2013-11-28 10:30:07' ) 

SELECT  *
FROM    #tabledates
WHERE   DATEADD(dd, 0, DATEDIFF(dd, 0, dt)) = '2013-11-28'
所以,在你的情况下,你会

DateTime dt=new DateTime();
dt=DateTime.Now;
Command Query is:"SELECT * FROM xxx WHERE 
                    DATEADD(dd, 0, DATEDIFF(dd, 0, Login_Date))=@date"
cmd.Parameters.add("@date",dt);

好的,请尝试以下命令查询:

SELECT [t0].[Column], [t0].[Date]
FROM [Table] AS [t0]
WHERE CONVERT(DATE, [t0].[Date]) = @p0
和使用:

var dt = DateTime.Today;
请试试这个

 var dt=DateTime.Now.ToString("dd-MMM-yy");
请试一试

SELECT * FROM xxx  WHERE (CONVERT(varchar(10), Login_Date,110)='27-Nov-13') 

@Joe的回答是正确的,但不幸的是,这是为SQL Server编写的。
以下是MySQL的一个版本:

SELECT Login_Date
FROM tabledates
WHERE Login_Date >= DATE(@date)
      AND Login_Date < DATE_ADD(DATE(@date), INTERVAL 1 DAY)
选择登录日期
从表日期开始
其中登录日期>=日期(@Date)
和登录日期<日期添加(日期(@Date),间隔1天)
(工作,仅使用显式时间戳而不是替换变量)

将使用索引(如果可用)。

在日期/时间变量上设置索引不是最佳做法。我建议您在表中创建另一个字段,该字段只包含日期值,这样就可以很容易地执行您自己的脚本,并准确地检索到所需的内容。 如果该解决方案不可行;我建议您使用:

SELECT *
FROM xxx
WHERE Login_Date BETWEEN Date1 AND Date2
其中Date1将是您希望登录尝试显示的日期(2013年11月27日) 日期2将是第二天(2013年11月28日)


N.B.:在第二个示例中,您需要记住的最重要的一点是,确保时间为00:00.000,这样从第二天起就不会包含任何尝试

这很好,但是如何在命令查询中编写。。?这行不通。。我已经测试过了。它没有选择任何行,因为虽然日期相同,但有时差。请查看我的否。如果他在数据库中有日期/时间类型,将应用程序变量更改为字符串将没有帮助。事实上,根据一些设置,这可能会得到完全错误的结果。请参阅我希望它在SQL查询中更改,而不是在程序中更改。。!否如果他在数据库中有日期/时间类型,将应用程序变量更改为字符串将没有帮助。事实上,根据许多设置,这可能会得到完全错误的结果。使用sql server,这可能会执行。。但是我使用的是MYSQL服务器..不是。转换为字符串不是一个好的选择。这不仅会忽略列上的任何索引,还有可能在其他方面出错。使用SQL server,这可能会执行。。。。但我需要它在我的SQl server中..不需要。转换为字符串不是一个好的选择。这不仅会忽略列上的任何索引,还有可能在其他方面出错。这可能在SQL server中有效,但我希望在MYSQL server中有效。。请帮忙;这将在SQL Server中工作。。。但我需要在我的SQL server中。。。请试一试..他不需要转换列来得到答案。除其他外,这将使在查询执行期间使用任何索引完全无效,这意味着它将花费更长的时间。执行此操作(转换/执行日期数学)将使该列上的任何索引用于搜索完全无效,这意味着这将花费更长的时间。呃,进行此类日期计算将导致优化器在该列上不使用任何索引,这意味着查询所需的时间将超过它应该使用的时间。以这种方式转换列将导致优化器忽略任何索引,这意味着查询所需的时间将超过它需要的时间。在选择查询中工作正常(强制转换和转换),但在更新查询中不工作。。