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

问题描述 投票:0回答:2

我有一个 .txt 平面文件源。我将其导入 ssis 进行一些验证、操作以生成 .csv 文件。因此:日期以字符串形式输入,需要以字符串形式输出,输出不是数据库,而是由数据导入工具加载的 csv。

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

sql-server t-sql ssis
2个回答
3
投票

不清楚原始列是

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 日吗?您想在英国或加拿大有朋友来运营吗?


2
投票

假设您的日期列名为 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)

您的新日期列将采用您想要的格式

© www.soinside.com 2019 - 2024. All rights reserved.