c# 在日期范围之间退款

标签 c# .net sql sql-server linq

基本上,我有以下帐户的发票行,如下所示:

BillID     AccountID     BilledFrom        BillTo      Days     Price
 38         3456         10/10/2012       10/11/2012    30       86p
 39         3456         11/11/2012       11/12/2012    30       87p
 40         3456         12/12/2012       30/12/2012    18       81p

用户希望向客户退款部分日期范围,因此用户需要输入日期开始日期和日期结束日期:

Date From: 18/10/2012     DateTo: 14/12/2012

这将导致信用额度根据每条额度的天数和价格向客户退款。我需要返回每一行并显示截止点。正如您所看到的,输入的范围跨越了 3 个发票行。

需要的结果是:

BillID  AccountID  BilledFrom    BillTo     RangeStart  RangeEnd    Days  Price
 38       3456     10/10/2012   10/11/2012  18/10/2012  10/11/2012   22    86p
 39       3456     11/11/2012   11/12/2012  11/11/2012  11/12/2012   30    87p
 40       3456     12/12/2012   30/12/2012  11/11/2012  11/12/2012    2    81p

结果基本上会带回最初适用的发票行,但会计算出该范围如何适合,并根据输入的日期范围计算帐单起始日期和帐单截止日期。

我需要 SQL 中的一个函数来提供此结果。任何帮助,将不胜感激。预先感谢您。

最佳答案

试试这个:

  declare @DateFrom date='10/18/2012'     
 declare @DateTo date='12/14/2012'

 select T.BillID,T.AccountID,T.BilledFrom,T.BillTo,
     case when BilledFrom<@DateFrom then @DateFrom else BilledFrom end [RangeStart], 
     case when BillTo<@DateTo then BillTo else @DateTo end [RangeEnd],DATEDIFF(D,case when BilledFrom<@DateFrom then @DateFrom else BilledFrom end ,case when BillTo<@DateTo then BillTo else @DateTo end ) [Days],Price
     from t_account  T

SQL Fiddle Demo

关于c# 在日期范围之间退款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11684897/

相关文章:

c# - 清除列中的数据

C#:如何在按下鼠标左/右键时获取鼠标的坐标?

c# - 我们可以使用 HttpClient 发送未签名的客户端证书吗?

c# - 无法在 C# 中将 BsonArray 转换为 BsonDocument

sql - 如何编写带有 except 的 SQL 查询过滤器?

c# - 嵌套 foreach 作为 LINQ 与链式链表

c# - asp net core viewmodel参数转换为字符串url

c# - Firefox C# 包装器/控件

mysql - 在mysql中获取一周的最后一个值

python - linux pyodbc 连接错误 "Can' t 打开 lib 'SQL Server Native Client11.0'“