【问题标题】:Update YEAR data in values like YYYMM for column of Datatype numeric or nchar更新数据类型为 numeric 或 nchar 的 YYYMM 等值中的 YEAR 数据
【发布时间】:2018-03-05 13:50:52
【问题描述】:

我正在努力更新数据库中某些列中的 YEAR 数据。这些值类似于 201201(年+月)。此列 (month_id) 的数据类型是数字。我只需要将 201201 更改为 201501,将 201301 更改为 201601,以便将 +3 添加到 Year。 我尝试过使用 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 等...这里也需要更改年份。但由于数据格式不同,我无法做到。

【问题讨论】:

    标签: sql-server sql-server-2008


    【解决方案1】:

    怎么样:

    UPDATE Table
    SET  month_id = month_id + 300
    

    【讨论】:

    • 我觉得他这些年都想换,不过我可能错了。
    • 我正在等待作者在生产中通过 CTRL+C 和 CTRL+V 尝试此操作后的回复:-D
    • Tanner> 是的,但这与问题文本中给出的示例不匹配。我想我们将不得不拭目以待。
    • 我还在想加300之后会发生什么?
    • 一个数字加 300 通常会发生什么?如果你在数字 202011 上加上 300,结果会是什么?
    【解决方案2】:

    这无需您进行任何强制转换即可工作...

    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
    

    【讨论】:

    • 太好了,谢谢。有没有一种解决方案,我不需要一次又一次地写旧值?必须对 where 子句做一些事情。
    【解决方案3】:

    这应该可以工作

    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,也基于您对其他帖子的 cmets: 如果您的目标是避免对同一记录进行多次更新,假设您已经将 201401 更新为 201701 并且您不希望查询使其成为 202001,因此您需要更新其他一些列,例如 UPDATED BIT 其中 1 = 已更新,0 = 未更新。

    更多,小心 where 子句:你真的想用新的逻辑(增加 3 年)更新你所有的表记录,或者你只是在寻找其中的一些。

    【讨论】:

    • 我还需要更改诸如 01.01.2012,01.01.2013 等值的年份。请问您对此有何建议?
    • 这些值是日期时间吗?还是 nvarchar?一旦你知道了数据类型,你就可以选择最好的函数来操作它们。
    • 那是 nchar(10)。但它不能作为数据类型转换为 DATE。
    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2015-02-06
    • 1970-01-01
    相关资源
    最近更新 更多