【问题标题】:Result output varied in date time query结果输出在日期时间查询中有所不同
【发布时间】:2021-05-03 03:27:38
【问题描述】:

我有一个从 dotnet 程序生成的查询,我在 SearchString 参数中传递日期,如下所示

 Public Function Getdata(ByVal d As Date) As DataTable 

WHERE (IC.ICD_UPDATE_DT IS NULL OR IC.ICD_UPDATE_DT > :SearchString and IC.Icd_Create_Dt < SearchString))
cmdCR.Parameters.AddWithValue(":SearchString", d.ToString("dd-MMM-yyyy"))

结果没有第 39 行

虽然我在查询端手动检查它,但结果如下所示只有 30 行

 WHERE (IC.ICD_UPDATE_DT IS NULL OR trunc(IC.ICD_UPDATE_DT) > '30-nov-2020' )
         and trunc(IC.Icd_Create_Dt) < '30-nov-2020' )

所以我无法找到为什么在相同条件下会有不同的输出。任何想法将不胜感激。

【问题讨论】:

  • 我不确定我是否理解这个问题
  • @00110001 我刚刚发布了 where 条件部分我是如何在 dotnet 程序中编写的,然后是 SearchString 参数中的值,我接受它并针对相同的条件修改了 sqlquery,然后生成输出。但结果不同

标签: c# vb.net oracle date datetime


【解决方案1】:

在下面的 where 中有 2 个 trunc(),在上面的查询中缺少。

对日期使用 trunc() 会截断时间并使日期像 '01.12.2021 01:23:34' 看起来像 '01.12.2021 00:00:00'。

因此,具有 icd_create_dt = '30-nov-2020 13:24' 的行将出现在第一个查询的输出中并显示在您的测试查询中

【讨论】:

  • 不,我只是在 plsql 上手动使用 trunc 来查看输出,因为没有其他想法如何签入 plsql。所以我使用 trunc(IC.ICD_UPDATE_DT) > '30-nov-2020'
【解决方案2】:

在 sql 查询中尝试使用这种格式解决我的问题

WHERE (trunc(IC.ICD_UPDATE_DT) IS NULL OR to_date(IC.ICD_UPDATE_DT,'DD/MM/YYYY') > '30-nov-2020' )
         and to_date(IC.Icd_Create_Dt,'DD/MM/YYYY') < '30-nov-2020' )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2015-01-08
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    相关资源
    最近更新 更多