将日期转换为新字段(日期时间)

时间:2014-11-17 08:40:35

标签: sql sql-server datetime

我想将包含YYYYDD的字符串转换为Datetime类型的新列。当前日期只有YYYYDD示例200908。我想更改为YYYYMMDD,例如20090829

我的代码:

with cts as
(
    select TRY_CONVERT(datetime,CRSE_EDTE,112) dte,
          [new_CRSE_EDTE]+'28' newdte 
    from [SMBM_DBPELJ].[DBPELJ].[MSTUMASTER]
)
update cts 
set newdte = dte

错误:

  

Msg 4406,Level 16,State 1,Line 1
  更新或插入视图或功能' cts'失败,因为它包含派生或常量字段。

1 个答案:

答案 0 :(得分:0)

错误消息非常明确:问题在于您尝试将CTE中定义的newdte字段更新为此表达式:[new_CRSE_EDTE]+'28'。显然,没有办法更新这样的表达。

您必须修改CTE以包含要更新的基表中的字段,并在UPDATE查询上更新该字段。

或许你想要做的就是:

with cts as
(
   select TRY_CONVERT(datetime,CRSE_EDTE,112) dte,
         [new_CRSE_EDTE] newdte 
   from [SMBM_DBPELJ].[DBPELJ].[MSTUMASTER]
)
update cts 
set newdte = dte + '28'

with cts as
(
   select TRY_CONVERT(datetime,CRSE_EDTE,112) + '28' dte,
         [new_CRSE_EDTE] newdte 
   from [SMBM_DBPELJ].[DBPELJ].[MSTUMASTER]
)
update cts 
set newdte = dte