我试图将getdate转换为YYYYMMDDHHmmss格式的字符串而没有太多运气。 我需要在SSIS中将其作为派生列。
我尝试过使用Datepart,但它无法使用。
Datepart("YYYY",(GETDATE())) & datepart("MM",MONTH(GETDATE())) & DATEPART("DD",(GETDATE())) & DATEPART("HH",(GETDATE()) & DATEPART("MM",(GETDATE())) & DATEPART("SS",(GETDATE()))
我做错了什么线索?
答案 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的整数。
您要执行的操作是对这些值进行字符串连接。 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)
答案 4 :(得分:-1)
这可以给你你想要的东西:
REPLACE(REPLACE(REPLACE(CONVERT(varchar, GETDATE(), 20), '-', ''), ':', ''), ' ', '')
有关可以使用convert
的更多日期格式,请参阅here