选择最小日期值并计算日期值?

Posted

技术标签:

【中文标题】选择最小日期值并计算日期值?【英文标题】:Select min date value and calculate date value? 【发布时间】:2020-02-14 07:35:05 【问题描述】:

我有一个名为 "SUMMARYDATA" 的表,其中包含 "STATUSIN,STATUSOUT,LATECOME" 列,我想在“STATUSIN”列上选择最小值。并提出条件:IF MIN(STATUSIN) > "08.00 AM" Then LATECOME = MIN(STATUSIN) - "08.00 AM"。如何选择最小日期值?以及如何计算MIN(STATUSIN) - "08.00 AM"

这是我显示数据库数据的代码:

    <asp:Repeater ID="rptrSUMMARYDATA" runat="server">
        <HeaderTemplate>
            <table class="table">
                <thead>
                    <tr>
                        <th>IN</th>
                        <th>OUT</th>
                        <th>LATECOME</th>
                    </tr>
                </thead>
                <tbody>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td><%# Eval("STATUSIN") %></td>
                <td><%# Eval("STATUSOUT") %></td>
                <td><%# Eval("LATECOME") %></td>
            </tr>
        </ItemTemplate>
        <FooterTemplate>
                </tbody>
            </table>
        </FooterTemplate>
    </asp:Repeater>  

这是我在后端的代码:

     private void BindSUMMARYDATARptr()
    
        String CS = ConfigurationManager.ConnectionStrings["MANHOURConnectionString"].ConnectionString;
        using (SqlConnection con = new SqlConnection(CS))
        
            using (SqlCommand cmd = new SqlCommand("SELECT * FROM SUMMARYDATA", con))
            
                using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
                
                    DataTable dtDaily = new DataTable();
                    sda.Fill(dtDaily);

                    rptrSUMMARYDATA.DataSource = dtDaily;
                    rptrSUMMARYDATA.DataBind();
                

            

        
    

【问题讨论】:

【参考方案1】:

你能试试这个吗..

  SELECT  STATUSIN,STATUSOUT, CASE WHEN CAST(STATUSIN AS TIME) > CAST('08:00:00' AS TIME) 
           THEN CONVERT(varchar, dateadd(s, -28800 ,STATUSIN), 108)  END AS LATECOME 
  FROM SUMMARYDATA

【讨论】:

感谢您的帮助,它的工作:) 但是如何更新列中的值 'LATECOME' 只需将 LATECome 值分配给列 @DeaAnanda,MIN(STATUSIN)在哪里? @KrishnaMuppalla 哦,对不起,我忘了MIN(STATUSIN),当STATUSIN 中有更多数据值时它不起作用。我说它有效,因为当我运行时,STATUSIN 中的数据值只有 1 使用 MIN(STATUSIN) 的目的?【参考方案2】:

datatable 获取MIN 并使用DateTime.Subtract

var minIN = Convert.ToDateTime(dt.AsEnumerable().Min(row => row["IN"]));
Console.WriteLine($"LATECOME minIN.Subtract(minIN.Date + new TimeSpan(8, 0, 0))");

注意:AsEnumerableSystem.Data.DataSetExtensions 的一部分。从 nuget 安装这个包

直接在数据库中更新(我不建议这样做,除非绝对需要)

UPDATE SUMMARYDATA 
  SET LATECOME =  CASE WHEN DATEDIFF(s,DATEADD(HOUR, 8, CAST(CAST((select MIN(STATUSIN) from SUMMARYDATA)  AS DATE) AS DATETIME)),(select MIN(STATUSIN) from SUMMARYDATA)) > 0 THEN
  (CONVERT(TIME,(select MIN(STATUSIN) from SUMMARYDATA)-DATEADD(HOUR, 8, CAST(CAST((select MIN(STATUSIN) from SUMMARYDATA)  AS DATE) AS DATETIME)))) ELSE NULL END

【讨论】:

感谢您的帮助,我一直在尝试该代码,但该值仍未出现在 LATECOME 列中。如何保存“LATECOME”列中的值? 我一直在尝试更新的代码,它的工作,但它不是我的意思的输出。那应该有一个条件:IF MIN(STATUSIN) &gt; "08.00 AM" 然后LATECOME = MIN(STATUSIN) - "08.00 AM" 非常感谢您帮助我:),我一直在尝试该代码。我已经有一些日期值 > 8 PM 的数据。但是为什么“LATECOME”列仍然为NULL? @DeaAnanda,在您找到MIN(STATUSIN) 后不久,其他拥有更多内容的人将被忽略。我想你需要再次检查要求。对我来说MIN(STATUSIN) 的这种情况没有任何意义 MIN(STATUSIN)过滤最小日期值的条件,因为列中有多个数据日期值【参考方案3】:
select DATEADD(minute, -iif(CAST(STATUSIN as time) > CAST('08:00' as time), DATEDIFF(MINUTE,CAST('08:00' as time),CAST(STATUSIN as time)) ,0) , STATUSIN) as LATECOME
from SUMMARYDATA

【讨论】:

更新查询:更新SUMMARYDATA集LATECOME= DATEADD(分钟, -iif(CAST(STATUSIN as time) > CAST('08:00' as time), DATEDIFF(MINUTE,CAST('08: 00' 作为时间),CAST(STATUSIN 作为时间)) ,0) , STATUSIN)【参考方案4】:

试试这个:

select STATUSIN,STATUSOUT,case when CAST(STATUSIN as time) > CAST('08:00' as time) then 
DATEDIFF(MINUTE,CAST('08:00' as time),CAST(STATUSIN as time)) 
end as LATECOME from test;

【讨论】:

谢谢你帮助我,它的工作。但是,如何在日期时间值中显示值?我的意思是显示 (hh:mm:ss) 以及如何将值更新到列 LATECOME

以上是关于选择最小日期值并计算日期值?的主要内容,如果未能解决你的问题,请参考以下文章

根据下拉值设置 2 个日期选择器的最小日期和最大日期

从 SQLite 数据库读取日期时间值并使用 WPF 将其分配给 C# 中的 datepicker

转换以字符串格式存储的日期值并减去 mongodb 中的当前日期

填写缺失的日期值并根据前一行填充第二列

输入日期值并与现有表进行比较

pandas使用max函数和min函数计算dataframe日期(时间)数据列中最大日期和最小日期(maximum and minimum date or time in dataframe)