如何在数据库中查找日期范围为SQL的表?

时间:2015-07-24 19:47:15

标签: sql sql-server

我有一个表格机智客户,其到达日期和出发日期的格式为“2014-25-11 00:00:00.000'”。我正在创建一个查询,以选择那些客户,但我有一个错误

  

从字符串转换日期和/或时间时转换失败。

但我想只找到日期2014-25-11

使用的SQL查询

select FirstName, LastName 
from customer 
where ArrivalDate > '%2014-25-11 00:00:00.000%' 
  and DepartureDate < '%2014-29-11 00:00:00.000%'

有人可以帮我写这个查询吗?

4 个答案:

答案 0 :(得分:1)

  

从字符串转换日期和/或时间时转换失败。

从您的值中删除'%'

试试这个:

select FirstName and LastName 
from customer 
where ArrivalDate > CAST('2014-25-11' AS DATE) 
  and DepartureDate < CAST('2014-29-11' AS DATE)

答案 1 :(得分:0)

如果你只想在2014-25-11那天找到那些,你可以使用这个

  select FirstName and LastName from customer
   where DATEPART(YEAR,ArrivalDate) = 2014 
and DATEPART(month,ArrivalDate) = 25 

and DATEPART(day,ArrivalDate)= 11

答案 2 :(得分:0)

如果你想要FirstName和LastName,你需要一个逗号而不是&#34;和&#34;。同时删除%通配符。以下查询在MS SQL Server中工作。

SELECT FirstName, LastName 
FROM customer 
WHERE CAST(ArrivalDate AS DATE) = '11/25/2014';

如果您希望在两个日期之间返回的值与您上面的值相似,请尝试:

SELECT FirstName, LastName 
FROM customer 
WHERE CAST(ArrivalDate AS DATE) BETWEEN '11/25/2014' AND '11/29/2014';

答案 3 :(得分:0)

我担心您必须订购日期部分,以便订购年度月份日期。 这样,即使您比较字符串,2014年11月26日即将到达和离开。构建日期字符串的方式,它不会那样排序。 2014-26-11不在2014-25-112014-29-11之间。

select * 
from customer c
outer apply ( 
  select ArrivalDate   = substring(c.ArrivalDate,1,4)
                        +substring(c.ArrivalDate,9,2)
                        +substring(c.ArrivalDate,6,2)
       , DepartureDate = substring(c.DepartureDate,1,4)
                         +substring(c.DepartureDate,9,2)
                         +substring(c.DepartureDate,6,2)
) p
where '20141126' between p.ArrivalDate and p.DepartureDate