导出到excel时s-s-rs不保持格式
Posted
技术标签:
【中文标题】导出到excel时s-s-rs不保持格式【英文标题】:s-s-rs not keeping format when exported to excel 【发布时间】:2015-03-12 06:45:11 【问题描述】:我有一个 s-s-rs 报告,其中一个字段作为日期列(来自 db 的值是 varchar)。但是当我导出到 excel 时,它不会保留日期格式。我尝试在表达式中使用 Cdate,格式化日期函数,还尝试将数字中的文本框属性更改为 date。当我右键单击并检查该单元格的格式时,如何确保我获得日期格式。数据很好。使用上述功能时,其显示格式为通用格式或自定义格式
【问题讨论】:
【参考方案1】:更改您的数据源查询,以便将 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 格式
【讨论】:
【参考方案2】:如果整个数据集中的日期格式一致,最简单的方法是在 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 来把它变成正确的格式。
真的,设计数据库的人不应该将日期放在字符串数据类型中......但有时你只需要使用你所拥有的。
我一直在谈论的参考:
MSDN - CAST and CONVERT (Transact-SQL) MSDN - CASE (Transact-SQL) MSDN - LIKE (Transact-SQL)【讨论】:
以上是关于导出到excel时s-s-rs不保持格式的主要内容,如果未能解决你的问题,请参考以下文章
导出到 Excel 时,s-s-rS 表达式不会格式化为数字