我有一个.txt平面文件源。我将其导入ssis进行一些验证,操作以生成.csv文件。
我需要将特定日期列的 yyyy-mm-dd 的日期格式转换为 mm / dd / yyyy 。例如:DOB列的日期1984-03-16需要转换为03/16/1984。我正在使用派生列转换,但无法弄清楚。
任何帮助都是适当的!
答案 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-99
或yeah-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列将采用您想要的格式