You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:15:40