【发布时间】:2019-07-22 12:22:18
【问题描述】:
我正在尝试编写一个将日期作为输入的存储过程。
如果传递的日期是18-07-2019,则应从数据库中获取从17-07-2019 06:00 am 到18-07-2019 06:00 am 的数据。
在下面的存储过程中,我将Reportdate(datetime 数据类型)作为输入。但我无法将它分配给我正在查询的数据库表中包含时间的列(TimestampUTC 列)。
因此,按照以下逻辑,数据会自动显示从昨天到今天“(21-07-2019 到 22-07-2019)”,并且不会根据用户输入的日期而改变。
这里显示部分存储过程:
CREATE PROCEDURE [dbo].[GetElectricityData]
@Reportdate DATETIME
AS
BEGIN
SET NOCOUNT ON;
WITH t AS
(
SELECT a.name, b.Data , a.UnitId, b.TimestampUTC
FROM [10.87.233.57,1433].[EMMA].[dbo].MeterTags a
JOIN [10.87.233.57,1433].[EMMA].[dbo].[DataLog] b ON a.MeterTagId = b.MeterTagId
WHERE b.MeterTagId IN (388, 184, 196, 194, 197)
AND TimestampUTC BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE() - 1), 0) + '06:00'
AND DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) + '06:00'
GROUP BY
DATEADD(minute, DATEDIFF(minute, 0, TimestampUTC) / 15 * 15, 0),
a.name, b.Data, a.UnitId, b.TimestampUTC
)
任何建议都会非常有帮助。
【问题讨论】:
-
您可能需要考虑将该参数设为
DATE而不是DATETIME。
标签: sql sql-server stored-procedures