【问题标题】:ISNULL MIN togetherISNULL MIN 一起
【发布时间】:2018-10-30 23:40:28
【问题描述】:

大家早上好。我进行了很好的搜索,但找不到答案(或我能理解的答案)

我有一个存储过程,想返回一个日期作为查询的一部分,但是如果没有记录 (NULL),则返回一些友好的内容,例如“无计划库存”

我有这个

ISNULL(MIN(wt.CompletionDate),'No Planned Stock') AS NextStockIn

这会导致以下错误

从字符串转换日期和/或时间时转换失败。

但是这一半有效(有一半有效吗?)

MIN(ISNULL(wt.CompletionDate,'No Planned Stock')) AS NextStockIn

问题是我仍然得到 NULL 而不是“无计划库存”

在理想世界中,id 像 nicley 格式 (dd/MM/yyyy) 日期或“无计划库存”

非常感谢您对此的任何帮助,在此先感谢您。

【问题讨论】:

  • 我很惊讶它完全有效。如果您将wt.CompletionDate 存储为date/datetime,那么文字字符串'No Planned Stock' 将被隐式转换为date/datetime。显然,'No Planned Stock' 不是日期。我建议将NULL 返回到您的表示层并在那里更改NULL 值。否则您将不得不将CONVERT 的值wt.CompletionDate 更改为varchar,这意味着您会丢失数据类型(这可能会导致其他问题)。
  • 在我上面的 cmets 之外,数据的格式化(比如日期到dd/MM/yyyy)是最应该在表示层完成的事情。
  • 感谢 Larnu 在表示层我使用 "=IIF(((ReportItems!Textbox72.Value)
  • 假设这是一个 SSRS 表达式。值为NULL 的日期没有小于0 的值,因此该表达式永远不会为真。文本框的正确表达式可能类似于:=IIf(IsNothing(Fields!CompletionDate.Value) = False,Fields!CompletionDate.Value,"No Planned Stock")。然后,您还需要设置文本框的格式。您可以通过选择文本框并按F4 来完成此操作。然后在属性窗格中找到格式属性,并将其更改为dd/MM/yyyy。值"No Planned Stock" 的格式不会错误。
  • 这是一个 SSRS 表达式,

标签: sql-server reporting-services min isnull


【解决方案1】:

我正在考虑这些方法

CASE WHEN CAST(wt.CompletionDate AS VARCHAR(25)) IS NULL 
THEN 'No Planned Stock' 
ELSE CAST(MIN(wt.CompletionDate) AS VARCHAR(25))

因为 varchar 肯定与 datetime 类型不兼容,但有时,根据 varchar 数据的值,它可以由 SQL Server 自动转换为 datetime 类型,在这种情况下,“No Planned Stock”是不可转换的到日期时间值。

或者你也可以试试这个

ISNULL(CAST(MIN(wt.CompletionDate) AS VARCHAR(25)),'No Planned Stock') AS NextStockIn

我没有测试这些,但我希望它能按预期工作

【讨论】:

  • ISNULL(CAST(MIN(wt.CompletionDate) AS VARCHAR(25)),'No Planned Stock') AS NextStockIn 正在工作!!蛋糕上的樱桃会让它看起来更好一点,所以 15/03/2018 目前是 2018 年 3 月 15 日上午 12:00
  • 我很高兴,您可以使用 FORMAT() 来显示查询的 MIN() 函数之后的日期,所以它就像 CAST(FORMAT(MIN(...)))
猜你喜欢
  • 2018-10-14
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 2019-05-27
  • 1970-01-01
相关资源
最近更新 更多