[英]Assigning an input value to a column's value in SQL Server stored procedure
我正在尝试编写一个将日期作为输入的存储过程。
如果传递的日期是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
)
任何建议都会非常有帮助。
GETDATE()
将始终为您提供当前日期,这就是为什么数据从昨天到今天自动显示的原因,而不是尝试如下所示
DATEADD(DAY, DATEDIFF(DAY, 0, CONVERT(datetime, @ReportDate) - 1), 0) + '06:00'
AND
DATEADD(DAY, DATEDIFF(DAY, 0, CONVERT(datetime, @ReportDate)), 0) + '06:00'
我可以看到您在 WHERE 子句中引用了 GETDATE()(两次)。 将它们替换为您的 @Reportdate 变量,如下所示。
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, @Reportdate - 1), 0) + '06:00'
AND DATEADD(DAY, DATEDIFF(DAY, 0, @Reportdate), 0) + '06:00'
GROUP BY
DATEADD(minute, DATEDIFF(minute, 0, TimestampUTC) / 15 * 15, 0),
a.name, b.Data, a.UnitId, b.TimestampUTC
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.