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 请务必注意,即使类似这样的:
=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] 表达式的有效样式格式字符串是啥?
如果小于0设置为Null / Blank - SQL Reporting Services