Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将十进制和日期/日期时间类型转换为自定义varchar等效类型_Sql Server_Sql Server 2005_Tsql_Ssis - Fatal编程技术网

Sql server 将十进制和日期/日期时间类型转换为自定义varchar等效类型

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) 现在我的问题是,因为这两个字段的最终目的地是一个文本文件,我必须在写入之前更改它们的格式,我应该将它们存储为它们应该存储的内容,

我正在通过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:

  • 适当存储(日期为日期时间等)。其他客户端可能会使用此数据。并使其具有可读性

  • 在客户端中转换(无论是在GUI中渲染还是文件导出) 对于GUI,您可能需要区域设置。对于一个文件,我会考虑在SQL中做它,作为BCP/Read。

  • 的一部分。
问题2:

不要将其转换为数字,而是将其转换为字符串,因为它非常简单。避免日期类型问题

对于值:

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
这将以所需的格式返回数据