Sql server 将十进制和日期/日期时间类型转换为自定义varchar等效类型
我正在通过SSIS包生成一个平面文本文件。该包从表中读取数据,创建一个固定长度的文本文件,并将该文件通过ftp发送给合作伙伴 数据通过我可以控制的流程进入我的表格,以便我可以根据建议进行调整 我最喜欢的是这个 我有两个字段,我们称它们为: DateOfHir-将存储为datetime或date,尽管时间是不相关的 收益-这将始终有一个2精度的6分制,即十进制(6,2) 现在我的问题是,因为这两个字段的最终目的地是一个文本文件,我必须在写入之前更改它们的格式,我应该将它们存储为它们应该存储的内容,即,将日期存储为日期,将十进制值存储为十进制值,还是将表存储为varchars 我问的原因是: 如果雇用日期为10/07/10->文件中的记录将写入100710 如果收入为$250.99->文件中的记录将写入025099 这是第一个问题 第二个问题是,如果9999.99是绝对可能的最大值,如何将250.99这样的小数转换为025099 SQL Server版本:2008问题1:Sql server 将十进制和日期/日期时间类型转换为自定义varchar等效类型,sql-server,sql-server-2005,tsql,ssis,Sql Server,Sql Server 2005,Tsql,Ssis,我正在通过SSIS包生成一个平面文本文件。该包从表中读取数据,创建一个固定长度的文本文件,并将该文件通过ftp发送给合作伙伴 数据通过我可以控制的流程进入我的表格,以便我可以根据建议进行调整 我最喜欢的是这个 我有两个字段,我们称它们为: DateOfHir-将存储为datetime或date,尽管时间是不相关的 收益-这将始终有一个2精度的6分制,即十进制(6,2) 现在我的问题是,因为这两个字段的最终目的地是一个文本文件,我必须在写入之前更改它们的格式,我应该将它们存储为它们应该存储的内容,
- 适当存储(日期为日期时间等)。其他客户端可能会使用此数据。并使其具有可读性
- 在客户端中转换(无论是在GUI中渲染还是文件导出) 对于GUI,您可能需要区域设置。对于一个文件,我会考虑在SQL中做它,作为BCP/Read。 的一部分。
SELECT RIGHT('000000' + LTRIM(REPLACE(STR ('250.99', 7, 2), '.', '')), 6)
或者基于您的交换机示例
CASE
WHEN Earnings = 250.99 THEN
--varchar, not decimal
RIGHT('000000' + LTRIM(REPLACE(STR ('250.99', 7, 2), '.', '')), 6)
ELSE CONVERT(varchar(6), DateOfHire, 12) --varchar. not datetime
END AS Whatever
首先,我不建议您将这些值存储在varchar字段中 将值导出到文本文件时,可以使用查询来准备数据 比如说,
select convert(varchar(8), DateOfHire, 112) DateOfHireText,
,replicate('0', 6- len(convert(varchar(10), CEILING(earnings * 100)))) + convert(varchar(10), CEILING(earnings * 100)) EarningsText
from mytable
这将以所需的格式返回数据