【问题标题】:How to copy one column of data to another without deleting data in receiving column如何将一列数据复制到另一列而不删除接收列中的数据
【发布时间】:2014-03-04 05:34:50
【问题描述】:

有问题。我有一张名为消费者的表。在该表中,有三列代表个人的出生日期。问题是 DOB 分为年、月、日。我想做的是将月份和日期列数据复制到年份列..

例如

year   month   day
1971   05      21

运行脚本后,我希望年份列中包含以下值:19710521

那我还想运行一个脚本来删除前2个整数(1971的“19”)

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:
    Select  CAST([year] as varchar(4)) + 
            CASE WHEN [month]<10 THEN '0'+CAST([month] as varchar(2)) 
                 ELSE CAST([month] as varchar(2)) END  + 
            CASE WHEN [day]<10 THEN '0'+CAST([day] as varchar(2)) 
                 ELSE CAST([day] as varchar(2)) END
            as dateCol
    From consumers
    

    删除前两位数

    SELECT RIGHT(dateCol,LEN(dateCol)-2) 
    FROM (
    
                Select  CAST([year] as varchar(4)) + 
                CASE WHEN [month]<10 THEN '0'+CAST([month] as varchar(2)) 
                     ELSE CAST([month] as varchar(2)) END  + 
                CASE WHEN [day]<10 THEN '0'+CAST([day] as varchar(2)) 
                     ELSE CAST([day] as varchar(2)) END
                as dateCol
                From consumers
         )Z
    

    【讨论】:

    • 我认为当你转换为 varchar 时,零会被截断。运行查询时,我得到1971521 的结果。
    • 不错。现在您可能想要在FROM 子句中添加表名consumers。并用结果更新year 列。
    • 感谢您的回复.. 那我该怎么做才能不截断零呢?
    • 太棒了!我会运行它并让你知道它是如何工作的。谢谢!!
    【解决方案2】:
    update consumers set year=cast(year as varchar(4))+cast(month as varchar(2))+cast(day as varchar(2))
    

    这会将数据复制到年份列

    如果年份列是 int 则

     update consumers set year=cast(cast(year as varchar(4))+cast(month as varchar(2))+cast(day as varchar(2)) as int)
    

    删除前 2 个数字

     update consumers  set year= SUBSTRING(cast(year as varchar(50)),3,LEN(year)-2)
    

    【讨论】:

    • 谢谢你们!!欣赏它。明天去试试!
    • 好的,快速跟进问题...我必须移动的一些字段为空。我想在这些文件中添加两个零……但有些字段有数据。我只想将 00 添加到空白的列和行中......有什么想法吗?
    • @mhasan - 我看到您的语句包含我需要的零加法,但查询不起作用。 Select 语句实际上只是选择并显示了结果,但没有更新表..
    • 更新 cousumers set columnName='00' where columnName is null
    • 感谢@HbV2。问题...使用您的 TSQL...我在月份和年份字段中有一些数据,如果少于 10 没有前导 0,这会让我在这个过程中大吃一惊。我需要跑到什么地方,如果这些字段中只有 1 位数字,则添加前导 0?
    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    相关资源
    最近更新 更多