【发布时间】:2021-11-02 01:25:48
【问题描述】:
我每月从 30 个表中检索数据(每个表代表一天)。我对每个单独的表(天)使用的查询保存为存储过程,并放置在 WHILE 循环中以运行 30 天(运行查询 30 次)。我将参数 A 和 B 定义为时间间隔 3 PM 和 7 PM,因为我需要检索该时间段的数据。
下面是查询(在存储过程中),它返回的值没有问题:
SELECT det_stn_id, SUM(vol)
FROM <DBName>.<TBName>
WHERE det_stn_id IN (36)
AND userdatetime BETWEEN "2021-09-01 15:00:00" AND "2021-09-01 19:00:00"
下面是带有变量 A 和 B 的查询(在存储过程中),它不返回任何值:
set @A = SUBSTRING(@DataDate, 1, 4) + '-' + SUBSTRING(@DataDate,5, 2) + '-'
+ SUBSTRING(@DataDate, 7, 2) + ' ' + '15:00:00'
set @B = SUBSTRING(@DataDate, 1, 4) + '-' + SUBSTRING(@DataDate,5, 2) + '-' + SUBSTRING(@DataDate, 7, 2) + ' ' + '19:00:00'
print @A
print @B
SELECT det_stn_id, SUM(vol) FROM <DBName>.<TBName>
where det_stn_id in (36)
AND userdatetime BETWEEN @A AND @B'
我没有正确地将变量 A 和 B 连接到字符串中吗? (顺便说一下, print @A 和 print @B 返回我试图放入字符串“2021-09-01 15:00:00”和“2021-09-01 19:00:00”的值)
【问题讨论】:
-
SQL Server 和 MySQL 是完全不同的产品;你真的在用什么?
-
@A@B和@DataDate的数据类型是什么?你可以只用userdatetime >= @startDate AND userdatetime < @endDatePlus1 AND CAST(userdatetime AS time) >= CAST('15:00:00' as time) AND CAST(userdatetime AS time) <= CAST('19:00:00' as time)做一个查询(没有while循环)
标签: sql sql-server date tsql