Shm*_*nix 3 c# sql-server datetime sql-server-2000
我有一个C#程序,它将作为Windows计划任务运行.该程序将加载,运行SQL查询,通过电子邮件发送存储在数据集中的结果,然后关闭.除了使用昨天的日期之外我还有其他所有东西.
这是我目前的查询:
SELECT Store_Id, Paid_Out_Amount, Paid_Out_Comment, Paid_Out_Datetime, Update_UserName, Till_Number, @startdate AS Start, @enddate AS Today
FROM Paid_Out_Tb
WHERE (Store_Id = 1929) AND (Paid_Out_Datetime BETWEEN @startdate AND @enddate)
Run Code Online (Sandbox Code Playgroud)
显然我需要在查询时分配@startdate和@enddate.因为我需要12AM到1159PM这是开始和结束的原因.所以举个例子.如果我想今天运行该程序,它将在昨天(23日)进行搜索,因此@startdate将被分配7/22/12 00:00:00而@enddate将被分配7/22/12 23:59:59 .. .
在查询而不是程序中执行它会更有意义吗?如果是这样,我将如何更改查询?
对现有答案略有改进,总是在不必调用构造函数的情况下获得昨天的开始DateTime.
var todayStart = DateTime.Today;
var yesterdayStart = todayStart.AddDays(-1);
var yesterdayEnd = todayStart.AddSeconds(-1); // Ick...
Run Code Online (Sandbox Code Playgroud)
请注意,这将使用当前系统时区的"今天"的含义 - 你确定这是你想要的吗?您可能希望考虑使用:
var todayUtcStart = DateTime.UtcNow.Date;
...
Run Code Online (Sandbox Code Playgroud)
BETWEEN将终点视为包容性是一种耻辱- 如果它等同于
start <= value && value < end
Run Code Online (Sandbox Code Playgroud)
然后你可以给两个午夜值,这将更加清晰.
另请注意,虽然它不会与数据库交互任何清理器,但对于日期和时间的其他用途,您可能希望考虑我的Noda Time库,其中包含专门用于表示日期的数据类型(以及另一个用于表示日期的数据类型)当天"等等.目的当然是使用日期和时间来澄清代码.如果没有,我就失败了!
| 归档时间: |
|
| 查看次数: |
1310 次 |
| 最近记录: |