将日期格式从yyyy-mm-dd更改为mm / dd / yyyy派生列

时间:2013-12-10 23:00:55

标签: sql-server tsql ssis

我有一个.txt平面文件源。我将其导入ssis进行一些验证,操作以生成.csv文件。

我需要将特定日期列的 yyyy-mm-dd 的日期格式转换为 mm / dd / yyyy 。例如:DOB列的日期1984-03-16需要转换为03/16/1984。我正在使用派生列转换,但无法弄清楚。

任何帮助都是适当的!

2 个答案:

答案 0 :(得分:2)

目前尚不清楚原始列是DATE还是字符串。下面是一个示例,演示如何根据请求转换日期:

DECLARE @t TABLE(d DATE, s CHAR(10));

INSERT @t VALUES('1984-03-16', '1984-03-16');

SELECT d,
  CONVERT(CHAR(10), d, 101),
  CONVERT(DATE, s),
  CONVERT(CHAR(10), CONVERT(DATE, s), 101)
FROM @t;

结果:

1984-03-16          03/16/1984            1984-03-16          03/16/1984
^^^^^^^^^^ date     ^^^^^^^^^^ string     ^^^^^^^^^^ date     ^^^^^^^^^^ string

如果您将其存储为字符串,那么您真的不应该这样做。当你为你认为需要的东西选择错误的数据类型时,你会失去各种重要的东西,比如格式。验证是最重要的 - 如果您使用CHAR(10)日期YYYY-MM-DD,那么阻止某人输入9999-99-99yeah-no-go的内容是什么?

在任何情况下,这都是一个格式化作业,在消耗此数据的任何一端处理得更好。在将其打印在一张纸上或显示在报告上之前,绝对没有理由采用日期或日期时间值并强制它像字符串一样。即使在演示方面,我也质疑提出像mm/dd/yyyy这样的区域性模糊格式的智慧。您确定您的所有受众,无论是现在还是未来,都明白09/06/2013是9月6日而不是6月9日?你想在英格兰或加拿大有任何朋友吗?

答案 1 :(得分:1)

假设您的日期列名为DateCol

您需要从该列创建三个派生列,而不是简单地将它们连接到类似

的列
derivedColumns   Expression 
year             SUBSTRING(DateCol, 1, 4)
day              RIGHT(DateCol, 2)
Month            SUBSTRING(DateCol, 6, 2)

NewDate          SUBSTRING(DateCol, 6, 2) + "/" + RIGHT(DateCol, 2)+ "/"+SUBSTRING(DateCol, 1, 4)

您的NewDate列将采用您想要的格式