将GETDATE()转换为YYYYMMDDhhmmss作为派生列

时间:2015-10-30 18:18:58

标签: sql-server ssis

我试图将getdate转换为YYYYMMDDHHmmss格式的字符串而没有太多运气。 我需要在SSIS中将其作为派生列。

我尝试过使用Datepart,但它无法使用。

Datepart("YYYY",(GETDATE())) & datepart("MM",MONTH(GETDATE())) & DATEPART("DD",(GETDATE())) & DATEPART("HH",(GETDATE()) & DATEPART("MM",(GETDATE())) & DATEPART("SS",(GETDATE()))

我做错了什么线索?

5 个答案:

答案 0 :(得分:4)

试试这个:

(DT_STR,4,1252)DATEPART( "yyyy" , getdate() ) +
RIGHT("0" + (DT_STR,4,1252)DATEPART( "mm" , getdate() ), 2) +
RIGHT("0" + (DT_STR,4,1252)DATEPART( "dd" , getdate() ), 2) +
RIGHT("0" + (DT_STR,4,1252)DATEPART( "Hh" , getdate() ), 2) +
RIGHT("0" + (DT_STR,4,1252)DATEPART( "mi" , getdate() ), 2) +
RIGHT("0" + (DT_STR,4,1252)DATEPART( "ss" , getdate() ), 2)

答案 1 :(得分:1)

这应该这样做,它只是将GETDATE()强制转换为字符串并替换不必要的字符。

LEFT(REPLACE(REPLACE(REPLACE((DT_STR,30,1252)GETDATE(),"-",""),":","")," ",""),14)

答案 2 :(得分:1)

DATEPART

  

返回表示日期的datepart的整数。

您要执行的操作是对这些值进行字符串连接。 SSIS表达式语言中字符串连接的运算符为+。但是,+也是整数数据类型的加法运算符,因此如果使用

Datepart("YYYY",(GETDATE())) + datepart("MM",MONTH(GETDATE()))

你不会得到201410.相反,你的价值是2024.现在,你可以使用加法来获得你想要的,你也只需要乘法。 (2014 * 100)+ 10将等于201410并将该值返回整数,因此可能符合您的要求。但是,一旦你构建到YYYYMMDDHHMMSS,你可能超出了Int32的范围,而且我懒得查找它,可能是Int64。

更好的方法是将DatePart的结果转换为字符串并使用连接。 但是,那里仍然存在问题。 05整数只是5。前导零是一个呈现的工件,所以如果你想要它的价值,你需要明确地把它放在那里。这样做的首选方法是连接前导0然后剃掉最后2个字符。对于10月到12月,你将有一个3字符的字符串010/011/012,然后转回10/11/12。剩余的月份将变为01/02 /../ 09,并且取正确的两个最多字符会产生正确的值。

RIGHT(("0" +(DT_WSTR, 2) MONTH(GETDATE())), 2)

&不是这种语言的连接运算符,因此问题#1与您的公式有关。

答案 3 :(得分:0)

Here's what worked for me. (DT_STR, 4, 1252)DATEPART("YYYY", GETDATE())+(DT_STR,2,1252)DATEPART("MM", GETDATE())+(DT_STR,2,1252)DATEPART("DD", GETDATE())+(DT_STR,2,1252)DATEPART("HH", GETDATE())+(DT_STR,2,1252)DATEPART("MI", GETDATE())+(DT_STR,2,1252)DATEPART("SS", GETDATE())

答案 4 :(得分:-1)

这可以给你你想要的东西:

REPLACE(REPLACE(REPLACE(CONVERT(varchar, GETDATE(), 20), '-', ''), ':', ''), ' ', '')

有关可以使用convert

的更多日期格式,请参阅here