【问题标题】:sql select records between today date plus 16 hourssql 选择今天日期加上 16 小时之间的记录
【发布时间】:2017-03-06 06:30:00
【问题描述】:

我正在尝试获取今天订单日期加上 16 小时之间的记录。

OrderDate 数据类型为datetime

我在该期间的数据库中有记录,但未使用以下查询显示。

例如,我有以下记录。

2017-03-05 10:20:30.000

2017-03-06 10:20:30.000

查询应该返回第二条记录。

有解决这个问题的建议吗?

SQL 查询

    SELECT
  dbo.Areas.AreaName,
  dbo.Brands.BrandName,
  dbo.Orders.OrderID,
  dbo.Orders.OrderStatus,
  dbo.Customers.CustomerName,
  dbo.Customers.CustomerID,
  dbo.Customers.Phone,
  dbo.Customers.Mobile,
  dbo.Orders.OrderDate,
  dbo.Outlets.OutletName,
  dbo.Users.FirstName,
  dbo.Users.LastName,
  dbo.Sources.SourceName,
  SUM((OrderDetails.Quantity * OrderDetails.UnitPrice)) + Orders.DeliveryCharge - ((SUM((OrderDetails.Quantity * OrderDetails.UnitPrice)) + Orders.DeliveryCharge) * Orders.Discount / 100) AS Amount,
  ReceivedOrders.ReceivingDate
FROM dbo.Orders
INNER JOIN dbo.Customers
  ON dbo.Orders.CustomerID = dbo.Customers.CustomerID
INNER JOIN dbo.Outlets
  ON dbo.Orders.OutletID = dbo.Outlets.OutletID
INNER JOIN dbo.Users
  ON dbo.Orders.UserID = dbo.Users.UserID
INNER JOIN dbo.Sources
  ON dbo.Orders.SourceID = dbo.Sources.SourceID
INNER JOIN dbo.OrderDetails
  ON dbo.OrderDetails.OrderID = dbo.Orders.OrderID
INNER JOIN dbo.Brands
  ON dbo.Brands.BrandID = dbo.Outlets.BrandID
INNER JOIN dbo.Areas
  ON dbo.Areas.AreaID = dbo.Customers.AreaID
LEFT JOIN dbo.ReceivedOrders
  ON dbo.ReceivedOrders.OrderID = dbo.Orders.OrderID
WHERE  BETWEEN OrderDate AND DATEADD(HOUR, 16, OrderDate) and OrderDate=GETDATE()
GROUP BY dbo.Orders.OrderID,
         dbo.Orders.OrderStatus,
         dbo.Customers.CustomerName,
         dbo.Customers.CustomerID,
         dbo.Customers.Phone,
         dbo.Customers.Mobile,
         dbo.Orders.OrderDate,
         dbo.Outlets.OutletName,
         dbo.Users.FirstName,
         dbo.Users.LastName,
         dbo.Sources.SourceName,
         dbo.Orders.DeliveryCharge,
         Orders.Discount,
         dbo.Brands.BrandName,
         dbo.Areas.AreaName,
         ReceivedOrders.ReceivingDate
ORDER BY dbo.Orders.OrderID

【问题讨论】:

  • 请显示示例数据。您的查询可能还有其他问题。
  • 请记住,GETDATE() 是当前日期和时间。您是否打算仅显示从执行查询的“当前”时间开始的记录?还是您希望它包括一整天?
  • 记录应该在订单日期加上 16 小时之间。并且订单日期应等于今天日期
  • 我在 OrderDate AND DATEADD(HOUR, 16, OrderDate) 和 OrderDate=GETDATE() 之间尝试过类似的事情
  • @Ayman 你说的是Dates,但你要加HOURS,我再问我的问题,你说order date should be equal to today date是在哪里考虑时间?

标签: sql sql-server


【解决方案1】:

试试这个:

GETDATE() BETWEEN Orders.OrderDate AND DATEADD(HOUR, 16, Orders.OrderDate)

【讨论】:

  • 不错的猜测......所以这是一个别名问题......我很惊讶查询运行了这个+1
【解决方案2】:

使用它来获取今天的日期,而不仅仅是返回当前时间的 getdate()

  select cast(cast(getdate() as varchar(12)) as datetime)

【讨论】:

    【解决方案3】:

    您可以使用CONVERT(VARCHAR(8),GETDATE(),112) 代替GETDATE(),这将删除当前时间并将日期转换为具有ISO 格式yyyyMMdd 的varchar,无需再次转换为日期时间

    WHERE   OrderDate BETWEEN CONVERT(VARCHAR(8),GETDATE(),112) AND DATEADD(HOUR, 16,CONVERT(VARCHAR(8),GETDATE(),112) ) 
    

    阅读更多关于 sql 日期格式的信息Here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多