【问题标题】:How to find tables in database with date range SQL?如何在具有日期范围 SQL 的数据库中查找表?
【发布时间】:2017-11-07 21:19:01
【问题描述】:

我有一个客户的表,其到达日期和离开日期的格式为“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%'

谁能帮我写这个查询?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

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

    从您的值中删除“%”

    试试这个:

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

    【讨论】:

    • 欣赏这一点。但这是否可行,因为我的数据以 '2014-25-11 00:00:00.000' 格式存储,但我只想在上述到达和离开日期之间找到。与时间无关
    • 试过但返回空白。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      如果您需要 FirstName 和 LastName,则需要逗号而不是“and”。同时删除 % 通配符。以下查询适用于 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';
      

      【讨论】:

      • 尝试了第一个选项,但没有奏效 - 返回空白。
      • 您的 ArrivalDate 和 DepartureDate 列是什么数据类型?您可以尝试添加CONVERT(DATE, CAST(datecreated as DATE), 101) = '11/25/2014'
      • 到达和离开的数据类型都是日期时间。你的意思是 CONVERT(ArrivalDate, CAST(datecreated as DATE), 101) = '11/25/2014' 吗?
      • 对不起,我的意思是CONVERT(DATE, CAST(ArrivalDate as DATE), 101) = '11/25/2014'
      【解决方案4】:

      恐怕您必须订购日期部分,以便订购年月日期。 这样,即使您比较字符串,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
      

      【讨论】:

      • 谢谢大家。抱歉,由于网络错误,我无法回复大家。但是我能够使用你们所有人并且它起作用了。出现未正确执行的 SQL 错误。再次感谢大家。
      猜你喜欢
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多