Reporting Services 从表达式中的 DateTime 中删除时间

Posted

技术标签:

【中文标题】Reporting Services 从表达式中的 DateTime 中删除时间【英文标题】:Reporting Services Remove Time from DateTime in Expression 【发布时间】:2010-11-26 14:19:17 【问题描述】:

我正在尝试使用明确的时间填充表达式(参数的默认值)。如何从“现在”功能中删除时间?

【问题讨论】:

查看方法一:***.com/a/19693553/2635532 请务必注意,即使 中的 SQL 仅返回 Date 变量,rdl 仍将使用 DateTime。因此,它必须由 rdl 格式化——请参阅下面的各种答案。 【参考方案1】:

类似这样的:

=FormatDateTime(Now, DateFormat.ShortDate) 

其中“现在”可以替换为您尝试转换的日期/时间字段的名称。) 例如,

=FormatDateTime(Fields!StartDate.Value, DateFormat.ShortDate)

【讨论】:

由于我的日期参数是一个日期时间,我需要一个额外的 CDate() 围绕上述表达式。 如果需要 Excel 格式的报告将不起作用。 FormatDateTIme 是字符串函数。当然它会去掉时间,但结果是一个字符串日期列,在排序时它将作为一个字符串从左到右排序。用户必须使用 Text to Columns 将列转换为真实的日期。 关键是,您不能按照仅日期格式执行 OP 要求的操作。你被字符串日期困住了。 这正是我所需要的。我有一个 s-s-rS 假设需要添加时间的 DOB 列。微软确实需要更新这个软件。【参考方案2】:

由于 s-s-rS 使用 VB,您可以执行以下操作:

=Today() 'returns date only

如果你要使用:

=Now() 'returns date and current timestamp

【讨论】:

=Today() 仅在 s-s-rS 中不返回日期 澄清一下,Today() 仅返回值的日期,但返回的数据类型是 DateTime【参考方案3】:
=CDate(Now).ToString("dd/MM/yyyy")

尽管您将日期格式硬编码为区域设置。

【讨论】:

+1 简洁的答案,事实上,这对我很有帮助。 正如我上面提到的,这可行,但会将列转换为字符串。它仍然不是真正的仅 DATE 数据类型。【参考方案4】:

如果您必须在报告标题上显示该字段,那么试试这个... 右键单击文本框 > 属性 > 类别 > 日期 > 选择 *格式(注意这将保持区域设置)。

由于这个问题已被多次查看,我将其发布...希望对您有所帮助。

【讨论】:

如果它被忽略了怎么办?例如。日期仍以小时和分钟显示。知道为什么会发生这种情况吗? 如果您为 TextBox/Placeholder 的值指定了一个函数,那么它将覆盖此屏幕上的格式选项。 拯救了我的一天。事件虽然在选项中很容易看到,但许多人不会在这里寻找格式化选项。非常感谢。【参考方案5】:

如果您希望结果为DateTime 数据类型,只需使用DateValue(Now)

【讨论】:

【参考方案6】:

如果预期的数据格式是MM-dd-yyyy,那么试试下面

=CDate(Now).ToString("MM-dd-yyyy")

同样你可以试试这个,

=Format(Today(),"MM-dd-yyyy") 

输出: 02-04-2016

注意:Now() 将显示当前日期时间戳

Today() 只会向您显示日期,而不是时间部分。

在我的示例中,您还可以设置任何日期格式,而不是 MM-dd-yyyy

【讨论】:

【参考方案7】:

在任何文本框字段的格式属性中,您都可以使用格式字符串:

例如日/月/年、日等

【讨论】:

问题是指报表参数的默认值,因此在文本框上设置格式将不起作用。此外,“D/M/Y”不会给出预期的结果,请尝试“dd/MM/yyyy”。【参考方案8】:

可能对其他人有所帮助的一件事是,您可以将:=CDate(Now).ToString("dd/MM/yyyy") 放在 s-s-rS 的格式字符串属性中,可以通过右键单击该列来获得。这是最干净的方法。那么你的表达式就不会太大并且难以在视觉上“解析”:)

【讨论】:

【参考方案9】:
    FormatDateTime(Parameter.StartDate.Value)

【讨论】:

您缺少表达式 FormatDateTime(DateField, DateFormat) 的第二个参数【参考方案10】:

我来晚了,但我尝试了上述所有解决方案!无法让它在参数中删除零并给我一个默认值(它忽略了格式或显示为空白)。我使用的是 s-s-rS 2005,因此一直在努力解决其笨重/错误的问题。

我的解决方法是在我从中提取日期的数据库中的自定义 [DimDate] 表中添加一列。我添加了一个列,它是 [date] 列所需格式的字符串表示形式。然后,我在 s-s-rS 中创建了 2 个新数据集,这些数据集为我的“到”和“从”日期默认值提取了以下 2 个默认值的查询 -

'来自'

    SELECT  Datestring
    FROM    dbo.dimDate
    WHERE   [date] = ( SELECT   MAX(date)
                       FROM     dbo.dimdate
                       WHERE    date < DATEADD(month, -3, GETDATE()
                     )

'到'

    SELECT  Datestring
    FROM    dbo.dimDate
    WHERE   [date] = ( SELECT   MAX(date)
                       FROM     dbo.dimdate
                       WHERE    date <= GETDATE()
                     )

【讨论】:

【参考方案11】:

我对日期/时间参数的解决方案:

=CDate(Today())

诀窍是按照 Perhentian 的建议转换回 DateTime。

【讨论】:

【参考方案12】:

here找到解决方案

获取前一天的最后一秒:

DateAdd("s",-1,DateAdd("d",1,Today())

这将返回前一周的最后一秒:

=dateadd("d", -Weekday(Now), (DateAdd("s",-1,DateAdd("d",1,Today()))))

【讨论】:

我从谷歌偶然发现了这里..但是..这不能回答你的问题。 (你为什么关心最后一秒?)但是,你确实击败了 RSolberg(谁正确回答了它)。也许您应该编辑您接受的答案以引用他的正确答案? DateAdd("s",-1,DateAdd("d",1,Today()) 返回今天的最后一秒,而不是前一天 - 并且缺少一个关闭备份以使其工作【参考方案13】:

只需将字符串连接到值的末尾即可:

Fields!<your field>.Value & " " 'test' 

这应该可以工作!

【讨论】:

嗨,Nathan,您能详细说明您的编辑吗?抱歉,我对 *** 有点陌生。问候!【参考方案14】:

这应该在数据集中完成。你可以这样做

Select CAST(CAST(YourDateTime as date) AS Varchar(11)) as DateColumnName

s-s-rS 布局中,只需这样做=Fields!DateColumnName.Value

【讨论】:

不会剥离时间组件是 DateColumnName 是 DateTime 数据类型。 OP 只想要日期。

以上是关于Reporting Services 从表达式中的 DateTime 中删除时间的主要内容,如果未能解决你的问题,请参考以下文章

Reporting Services [s-s-rS] 表达式的有效样式格式字符串是啥?

如何添加筛选器 (Reporting Services)

如果小于0设置为Null / Blank - SQL Reporting Services

Reporting Services 中的复杂图表?

Reporting Services 中的 PDF 导出问题

Reporting Services 中的图表百分比差异