SELECT Query:我只希望DateTime部分来自DateTime For Filtering行

时间:2013-11-27 10:24:22

标签: c# mysql sql datetime

我有桌子 xxx(,,,,,);其中一列中有 DateTime 数据类型(例如 Login_date

Login_date的值类似于:" 27-Nov-13 3:12:07 PM "

我的问题是

我想选择表格xxx的行,其中Login_date为" 27-Nov-13 " 我在执行像这样的查询时遇到错误

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 数据库 请把我带出这个问题。

11 个答案:

答案 0 :(得分:1)

请试试这个,

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

答案 1 :(得分:0)

试试这个:

dt.ToString("dd-MMM-yy")

所以在添加参数时:

cmd.Parameters.add("@date",dt.ToString("dd-MMM-yy"));

答案 2 :(得分:0)

尝试convert(datetime, cast(login_date as varchar(12)),103)='27-Nov-13'

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

答案 3 :(得分:0)

试试这个:

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);

这样我们只是在没有时间的情况下比较日期。

答案 4 :(得分:0)

试试这个:

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);

在查询中使用日期范围可能比投射到DATE更有效,因为它可以让您利用DATETIME列上可能存在的任何索引。

答案 5 :(得分:0)

尝试以下查询,

SELECT * FROM xxx WHERE (convert(date,Login_Date,101))=convert(date,@date,101)

答案 6 :(得分:0)

这应该有用......

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);

答案 7 :(得分:0)

好的,试试这个作为你的命令查询:

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

并使用:

var dt = DateTime.Today;

答案 8 :(得分:0)

请尝试

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

答案 9 :(得分:0)

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

SELECT Login_Date
FROM tabledates
WHERE Login_Date >= DATE(@date)
      AND Login_Date < DATE_ADD(DATE(@date), INTERVAL 1 DAY)

(工作SQL Fiddle example,只有明确的时间戳而不是替换变量)
将使用索引(如果可用)。

答案 10 :(得分:0)

拥有日期/时间变量的索引不是最佳做法。我建议您在表中创建另一个字段,该字段只有日期值,然后执行您自己的脚本将很容易,并将确切地检索您需要的内容。 如果这个解决方案不可行;我建议您使用:

SELECT *
FROM xxx
WHERE Login_Date BETWEEN Date1 AND Date2

其中Date1将是您希望登录尝试显示的日期(2013年11月27日) 和Date2将是第二天(2013年11月28日)

NB:在第二个示例中,最重要的是要确保时间为00:00.000,因此不会包含任何尝试第二天