首页 文章

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

提问于
浏览
2

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

2 回答

  • 0

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

    例如转换(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格式

  • 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的代码 . )

    您可以使用case语句和 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以使其格式正确 .

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

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

相关问题