对于数据类型为numeric或nchar的列,以YYYMM等值更新YEAR数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于数据类型为numeric或nchar的列,以YYYMM等值更新YEAR数据相关的知识,希望对你有一定的参考价值。
我正在努力更新数据库中某些列的YEAR数据。值类似于201201(年+月)。此列的数据类型(month_id)是数字。我只需要将201201更改为201501,201301到201601,这样就可以将+3添加到年份。我尝试过使用CAST,CONVERT。试图写下如下查询:
UPDATE Table
SET month_id = SUBSTRING(CAST(month_id as VARCHAR(10)), 1, 4) +3
WHERE month_id = '202011'
它给出结果为2023.不是202311.后来我尝试了CONCAT,但它给出算术错误。有人可以建议一个合适的解决方案?
也与另一列day_desc(datatype - nchar [10])相同,值类似于01.01.2012,01.01.2013等...此处也需要更改年份。但由于数据格式不同,我无法做到。
答案
这个怎么样:
UPDATE Table
SET month_id = month_id + 300
另一答案
这将无需您进行任何铸造即可工作......
UPDATE Table
SET month_id = (((month_id / 100) + 3) * 100) + (month_id % 100)
--(month_id / 100) will return the year part
--(month_id % 100) will return the month part
另一答案
这应该工作
UPDATE Table
SET month_id = CONCAT( CAST(LEFT(month_id, 4) + 3 AS NVARCHAR(4)), RIGHT(month_id, 2))
WHERE month_id = '202011'
根据您的评论进行编辑,输入如'01 .01.2014':
UPDATE MyTable
SET MyColumn = CONCAT(LEFT(MyValue, 6), CONVERT(INT, RIGHT(MyValue, 4))+3)
WHERE MyColumn = '01.01.2014'
Edit2,根据您对其他帖子的评论:如果您的目标是避免对同一记录进行多次更新,请假设您已经将201401
更新为201701
并且您不希望您的查询使其成为202001
,因此您需要更新其他一些列,例如UPDATED BIT
,其中1 =已经更新,0 =未更新。
更多,小心where子句:你真的想用新的逻辑(增加3年)更新你的所有表记录,或者你可能只想看其中的一些。
以上是关于对于数据类型为numeric或nchar的列,以YYYMM等值更新YEAR数据的主要内容,如果未能解决你的问题,请参考以下文章