【问题标题】:Getting data from database based on today's date根据今天的日期从数据库中获取数据
【发布时间】:2017-06-22 10:55:55
【问题描述】:

我编写了一个查询来从数据库中获取今天的数据。

SqlDataAdapter da = new SqlDataAdapter(@"SELECT 
                 Bill_Date as [Bill Date],
                 Customers.Name as [Customer Name],
                 Item, Item_Code as [Item Code], 
                 MRP, Tax_Percentage as [Tax Percentage],
                 Quantity, Amount as Total, 
                 Discount, Amount_After_Discount as [Grand Total],
                 Billing_Type as [Billing Type], 
                 Transaction_Number as [Transaction Number] 
             FROM 
                 POS 
             LEFT JOIN 
                 Customers ON POS.Customer = Customers.Customer_Id 
             WHERE 
                 Bill_Date = CAST(GETDATE() AS DATE)", con);

我将结果显示到数据网格视图。但什么也没有发生。没有数据被检索。但是今天的数据库中有数据。

【问题讨论】:

  • 假设您没有显示的代码有效,您的问题是因为 GETDATE 返回分钟、秒等,并且不会完全匹配任何存储的日期。
  • 我在数据库中的 bill_date 列有日期和时间。
  • 在 sql server management studio 中运行您的查询。一开始我误读了您的查询,但正如 Gordon 所说,如果您的字段还包含时间,那么它不会比较相等。

标签: c# sql-server winforms visual-studio


【解决方案1】:

这是您的查询:

SELECT . . .
FROM POS LEFT JOIN
     Customers
     ON POS.Customer=Customers.Customer_Id
WHERE Bill_Date = CAST(GETDATE() AS Date);

我能想到这不会返回任何东西的三个原因:

  • 当前日期没有记录。
  • Bill_Date 包含时间和日期。
  • Bill_Date 存储为字符串,不能转换为日期。

你可以很容易地检查最后两个。第二个:

WHERE cast(Bill_Date as date) = CAST(GETDATE() AS Date);

第三个:

select bill_date
from <whatever>
where try_convert(date, bill_date) is null;

【讨论】:

  • 感谢您的回复。当前日期有记录。 bill_date 列是日期时间数据类型。是的 bill_date 列也存储日期和时间。
  • 非常感谢。将账单日期设为有效日期! :)
【解决方案2】:

日期是时间点,因此除非您在创建记录时从记录中删除了任何时间部分,否则您在查询数据时需要考虑到这一点。 通常我使用 >=date 和

WHERE Bill_Date >= CAST(GETDATE() AS Date) AND Bill_Date < CAST((GETDATE() + 1) AS Date)

【讨论】:

    猜你喜欢
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2020-04-16
    • 2022-11-15
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    相关资源
    最近更新 更多