我有一个ssrs报告,其中一个字段作为日期列(来自db的值是varchar)。但当我导出excel时,它不保留格式为日期。我尝试在表达式&amp ;;中使用Cdate格式化日期函数。还尝试更改数字到目前为止的文本框属性。当我右键单击并检查该单元格的格式时,我如何确保将格式设置为日期。数据很好。当使用上面提到的函数时,它显示格式为一般或自定义
答案 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以使其格式正确。
真的,设计数据库的人不应该在字符串数据类型中添加日期......但有时你只需要使用你所拥有的东西。
参考我一直在谈论的内容: