我希望在日期介于dd / mm / yyyy和dd / mm / yyyy之间时选择数据

时间:2014-07-20 19:42:29

标签: c# sql visual-studio-2010

我想选择日期介于dd / mm / yyyy和dd / mm / yyyy之间的数据

如果我在同一个月的日期找到数据

例如

SELECT * 
FROM Table Name 
WHERE date between '21/07/2014' and '29/07/2014'  

如果是两个不同月份之间的日期..结果为空

例如

SELECT * 
FROM Table Name 
WHERE date between '21/07/2014' and '1/08/2014' 

5 个答案:

答案 0 :(得分:2)

在SQL Server中使用日期时,要明确付出代价。在您的第二个示例中,可能SQL Server将第二个日期转换为2014年1月8日,因为它将采用美国样式格式,如mm/dd/yyyy。我总是用yyyy-mm-dd格式写我的日期,但使用ISO YYYYMMDD格式可能更好,因为SELECT * FROM TableName WHERE date between '20140721' and '20140801' (正如marc_s指出的那样)是一种更通用的格式:

{{1}}

答案 1 :(得分:1)

日期没有格式。由于你引用了C#,这个代码似乎来自.NET调用者 - 在这种情况下,参数化

DateTime from = ..., to = ... // perhaps DateTime.Parse or DateTime.ParseExact,
                              // but perhaps DateTime.Now.Date.Add(...)
cmd.CommandText = @"
SELECT * 
FROM Table Name 
WHERE date between @from and @to";
cmd.Parameters.AddWithValue("from", from);
cmd.Parameters.AddWithValue("to", to);

现在没有任何歧义。

答案 2 :(得分:0)

使用ISO 8601通用格式。例如'2007-04-05T14:30'。无论语言环境设置如何,都会对其进行解释。

http://en.wikipedia.org/wiki/ISO_8601#Dates

答案 3 :(得分:0)

如果你绝对想要使用样式103的DD / MM / YY格式,如果你转换,即

select *
from tbl
where dt between convert(date,'21/07/2014',103) and convert(date,'01/08/2014',103)

请参阅:http://sqlfiddle.com/#!6/f199c/6/0

http://www.w3schools.com/sql/func_convert.asp

答案 4 :(得分:0)

你也可以像这样编写你的查询

SELECT * FROM表名 在'21 -Aug-2014'和'2014年9月1日'之间的日期