数据集中有一个(mmddyyyy)格式的字符串字段。我正在尝试将其转换为SSRS中的日期字段。我已经尝试使用下面的命令,但出现错误。
CDate(Fields!LocalTXNDate.Value)
有没有人能请你建议一下。
mmvthczy1#
虽然Larnu是正确的,但方法是纠正数据库,有时我们这些低级的报表制作者在进行这些更改方面没有发言权a-更不用说让DBA在合理的时间内进行更改了。如果无法将数据更改为正确的数据,则将字段转换为日期并将其用作日期的最简单方法是将计算字段添加到数据集。打开数据集属性,单击“字段”选项卡,然后单击“添加计算字段”。x1c 0d1x对于“表达式”,请使用字符串函数将字段解析为通用日期格式,然后使用CDATE将其转换为日期类型。然后将新字段用于日期。如果不重用该字段,也可以在文本框中使用它,但这样更易于操作“计算”字段。
=CDATE( RIGHT(Fields!LocalTXNDate.Value, 4) & "-" & LEFT(Fields!LocalTXNDate.Value, 2) & "-" & MID(Fields!LocalTXNDate.Value, 3, 2) )
brgchamk2#
这里的问题不是SSRS,而是您的数据,而且您使用了基于字符串的数据类型来存储数据。您需要在源位置而不是在报表级别解决问题。您选择的字符串格式MMddyyyy在SQL Server中的任何语言中都不是默认识别的格式,即使您显式使用SET DATEFORMAT,它也不会显示为样式。SET DATEFORMAT MDY; SELECT CONVERT(date,'11172022');将失败。因此,您需要首先对数据进行一些字符串操作,以成为明确的格式(yyyyMMdd):
MMddyyyy
SET DATEFORMAT
SET DATEFORMAT MDY; SELECT CONVERT(date,'11172022');
yyyyMMdd
UPDATE YT SET YourDateColumn = CONVERT(varchar(8),V.DateValue,112) FROM dbo.YourTable YT CROSS APPLY (VALUES(TRY_CONVERT(date,CONCAT(RIGHT(YT.YourDateColumn,4),LEFT(YT.YourDateColumn,4)))))V(DateValue);
对于任何错误的值,如'17112022'这将UPDATE的值改为NULL;因此,您可能需要为新值创建一个新列,或者创建一个新列来存储无法转换的日期值。将值更改为明确的格式后,可以ALTER该列:
'17112022'
UPDATE
NULL
ALTER
ALTER TABLe dbo.YourTable ALTER COLUMN YourDateColumn date NULL;
请注意,如果您有任何限制,您将需要先DROP这些限制,然后再重新CREATE这些限制。现在列的数据类型是正确的,您无需在SSRS中执行任何操作,因为数据类型是正确的。
DROP
CREATE
2条答案
按热度按时间mmvthczy1#
虽然Larnu是正确的,但方法是纠正数据库,有时我们这些低级的报表制作者在进行这些更改方面没有发言权a-更不用说让DBA在合理的时间内进行更改了。
如果无法将数据更改为正确的数据,则将字段转换为日期并将其用作日期的最简单方法是将计算字段添加到数据集。打开数据集属性,单击“字段”选项卡,然后单击“添加计算字段”。x1c 0d1x
对于“表达式”,请使用字符串函数将字段解析为通用日期格式,然后使用CDATE将其转换为日期类型。然后将新字段用于日期。如果不重用该字段,也可以在文本框中使用它,但这样更易于操作“计算”字段。
brgchamk2#
这里的问题不是SSRS,而是您的数据,而且您使用了基于字符串的数据类型来存储数据。您需要在源位置而不是在报表级别解决问题。
您选择的字符串格式
MMddyyyy
在SQL Server中的任何语言中都不是默认识别的格式,即使您显式使用SET DATEFORMAT
,它也不会显示为样式。SET DATEFORMAT MDY; SELECT CONVERT(date,'11172022');
将失败。因此,您需要首先对数据进行一些字符串操作,以成为明确的格式(yyyyMMdd
):对于任何错误的值,如
'17112022'
这将UPDATE
的值改为NULL
;因此,您可能需要为新值创建一个新列,或者创建一个新列来存储无法转换的日期值。将值更改为明确的格式后,可以
ALTER
该列:请注意,如果您有任何限制,您将需要先
DROP
这些限制,然后再重新CREATE
这些限制。现在列的数据类型是正确的,您无需在SSRS中执行任何操作,因为数据类型是正确的。