我在表格中的分隔字段中有以下日期。如何编写查询以显示两个日期之间的值。 例如:2011年2月1日至2011年2月6日之间的值:
day month year value
--------------------------------------------------
2 6 2011 120
3 7 2011 130
5 5 2011 100
6 1 2011 50
答案 0 :(得分:3)
正如其他人所说,我的第一个建议是使用日期。或者,如果您需要比示例,日期时间或带时区的时间戳更详细的信息。
但是如果你真的需要使用这些数据,我认为这样的事情应该有效,这取决于你的SQL风格:
SELECT value, CONVERT(DATE,CONCAT(CONCAT(CONCAT(CONCAT(day, "-"), month), "-"), year), 105) date FROM table_name where (2/1/2011) <= date and date <= (2/6/2011);
(使用Oracle SQL,您可以使用to_date而不是转换并可选地使用||连接运算符;对于SQL服务器,您必须使用+连接运算符;对于MySQL,这应该是正确的)
(2011年2月1日)和(2/6/2011)可以是您转换为类似于其他转换的字符串,也可以使用PreparedStatement或类似的直接输入(这将是更好的选择)。
答案 1 :(得分:2)
转换为日期以便于比较而不用担心dmy或mdy,以标准方式:
DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0)))
所以,这样的事情。要使用的最安全的日期格式为yyyymmdd
(特别是对于SQL Server)
SELECT
value,
DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0))) AS realdate
FROM Mytable_name
WHERE
'20110201' <= DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0)))
and
DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0))) <= '20110206'
答案 2 :(得分:2)
我有相同的场景,但是Month列显示了Month name。通过对给定查询的轻微修改,我能够获取数据。
SELECT *
FROM Table_Name AS Tbl_Date
WHERE (Year * 10000 + DATEPART(mm, CAST(Month + Year AS DATETIME)) * 100 + 1
BETWEEN 20111101 AND 20121201)
希望这会有所帮助
答案 3 :(得分:1)
如果你使用的是oracle数据库,那么你可以使用TO_DATE和TO_CHAR函数来实现这个目标......
如下 -
select * from table_name
where to_date(day||month||year,'DDMMYYYY')
between &mindate and &maxdate
最小日期,您可以将2-jan-2011和最大日期定为2-jun-2011
我希望它适合你:)
答案 4 :(得分:1)
我找到了答案,我想要感谢你们
SELECT Tbl_Date.Value,Tbl_Date.Year,Tbl_Date.Month,Tbl_Date.Day from Tbl_Date where ((Tbl_Date.Year*10000)+(Tbl_Date.Month*100)+Tbl_Date.Day) between 110102 and 110602