我有桌子 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 数据库 请把我带出这个问题。
答案 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,因此不会包含任何尝试第二天