如何使用T-SQL获取指定时间范围内的全部数据并列出所有交易
使用T-SQL获取指定时间范围内的交易记录
没问题,我来帮你搞定这个需求。想要用T-SQL抓取指定时间范围内的所有交易记录,核心思路就是通过WHERE子句过滤transDate字段的时间范围就行。先把你提供的测试数据库代码整理完整(我补全了截断的插入项,假设是('hasan', '2-1-2000', 120)):
CREATE DATABASE testGroupfirst22; GO USE testGroupfirst22; GO CREATE TABLE testTbl ( id INT PRIMARY KEY IDENTITY, custnum NVARCHAR(50), transDate DATETIME, degree INT ); GO INSERT INTO testTbl VALUES ('ahmed', '1-1-2000', 50), ('ahmed', '1-1-2000', 500), ('ahmed', '2-1-2000', 660), ('ahmed', '2-1-2000', 666), ('ahmed', '3-1-2000', 50), ('ali', '1-1-2000', 5054), ('ali', '1-1-2000', 1500), ('ali', '1-1-2000', 66220), ('ali', '1-1-2000', 6656), ('ali', '1-1-2000', 540), ('hasan', '2-1-2000', 120); -- 补全截断的插入项 GO
接下来给你两种常用的查询写法,各有适用场景:
方法1:用BETWEEN(适合明确包含起止时间的场景)
比如要查询**2000年1月1日到2000年1月2日(含当天所有时间)**的交易记录:
USE testGroupfirst22; GO SELECT * FROM testTbl WHERE transDate BETWEEN '2000-01-01 00:00:00' AND '2000-01-02 23:59:59';
注意:如果只写日期(比如
'2000-01-02'),SQL会默认解析为当天零点,这样会漏掉当天非零点的交易,所以最好明确写出时分秒。
方法2:用大于等于+小于(更安全的边界处理)
如果你不想纠结时分秒的细节,推荐这种写法,同样是查询2000年1月1日到2000年1月2日的所有记录:
USE testGroupfirst22; GO SELECT * FROM testTbl WHERE transDate >= '2000-01-01' AND transDate < '2000-01-03'; -- 用下一天的零点,自动包含前一天的所有时间
这种写法不管transDate有没有时间部分,都能精准命中目标范围内的所有记录,避免遗漏。
如果需要额外统计(比如按客户分组看交易总额),也可以扩展查询:
-- 按客户分组,统计指定时间内的交易次数和总额 SELECT custnum, COUNT(*) AS 交易次数, SUM(degree) AS 交易总额 FROM testTbl WHERE transDate >= '2000-01-01' AND transDate < '2000-01-03' GROUP BY custnum;
内容的提问来源于stack exchange,提问作者user4833581
相关产品推荐
相关产品推荐

