ssrs在导出到excel时不保留格式

时间:2015-03-12 06:45:11

标签: sql sql-server reporting-services

我有一个ssrs报告,其中一个字段作为日期列(来自db的值是varchar)。但当我导出excel时,它不保留格式为日期。我尝试在表达式&amp ;;中使用Cdate格式化日期函数。还尝试更改数字到目前为止的文本框属性。当我右键单击并检查该单元格的格式时,我如何确保将格式设置为日期。数据很好。当使用上面提到的函数时,它显示格式为一般或自定义

2 个答案:

答案 0 :(得分:0)

更改数据源查询,以便将varchar日期转换为日期

例如Convert(datetime,MyDate,103)103假设日期是DD / MM / YY格式

或者您可以尝试使用日期序列函数

=DateSerial(Cint(Right(mydate(4))), Cint(Mid(mydate(4),4,2)), Cint(Left(mydate,2)))

如果mydate是您的日期字段值,则再次假设日期为dd / mm / yyyy格式

答案 1 :(得分:0)

如果您的整个数据集中的日期格式一致,最简单的方法是在SQL查询中使用CONVERT()函数。 CONVERT()采用可选的第三个参数来指定源数据所在的样式。样式告诉函数如何转换可能采用多种形式(如日期和时间)的值。此处列出的代码太多,因此请查看下面链接的MSDN页面以查看所有代码。

例如,如果您的日期以DD/MM/YY格式存储,那么您将使用代码3.然后您可以将其转换为:

SELECT CONVERT(DATE, DateField1, 3) AS dt
FROM tbl

但是,如果您的日期不一致,事情就会变得复杂一些。您需要查看可以在那里显示哪些类型的值,并查看是否有任何方法可以以编程方式识别它们。

更复杂的例子是,有时日期为DD/MM/YY,有时日期为DD-MM-YY。此外,有时它是一个四位数而不是两位数的年份,您将在MSDN页面上注意到它是一个不同的样式代码。 (四位数年份通常是两位数年份加上100的代码。)

您可以使用案例陈述和LIKE模式匹配将所有这些转换为日期。

SELECT CASE
        WHEN DateField1 LIKE '__/__/____' THEN CONVERT (DATE, DateField1, 103)
        WHEN DateField1 LIKE '__/__/__' THEN CONVERT(DATE, DateField1, 3)
        WHEN DateField1 LIKE '__-__-____' THEN CONVERT(DATE, DateField1, 105)
        WHEN DateField1 LIKE '__-__-__' THEN CONVERT(DATE, DateField1, 5)
    END AS dt
FROM tbl

这些模式不匹配日期或月份只有一位数的日期,上面的代码可能不会解决您的问题。您需要查看数据的外观并编写一些SQL以使其格式正确。

真的,设计数据库的人不应该在字符串数据类型中添加日期......但有时你只需要使用你所拥有的东西。

参考我一直在谈论的内容: