【问题标题】:how to use substring in an update statement in ms sql?如何在 ms sql 的更新语句中使用子字符串?
【发布时间】:2021-03-09 12:42:26
【问题描述】:

我有两个表,每个表都有日期列我想将第一个表的日期更新为第二个表中的日期,而只更改 yyyy-mm-dd 的时间

select substring(CONVERT(varchar(25), r1.date1, 121),1,10),
       substring(CONVERT(varchar(25), r2.date2, 121),1,10)
from table1 r1 join
     table2 r2
     on r1.Number = r2.Number

update r1
    set r1.date1=substring(CONVERT(varchar(25), r1.[Time], 121),1,10) = substring(CONVERT(varchar(25), r2.date2, 121),1,10)
    from table1 r1 join
         table2 r2 
         on r1.Number = r2.Number

【问题讨论】:

  • 请提供样本数据和期望的结果。另外,为什么您的查询不起作用?
  • 我建议您使用 datediff 和 dateadd 通过添加/减去适当的天数来调整所需的值 - 这将使时间部分不受影响。您的目标示例将帮助其他人更全面地了解您的问题。
  • 在提出问题时,您需要提供一个可重现的最小示例。请参考以下链接:stackoverflow.com/help/minimal-reproducible-example 请提供以下内容: (1) DDL 和样本数据填充,即 CREATE table(s) 加上 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上面#1 中的样本数据。 (4) 你的 SQL Server 版本 (SELECT @@version;)

标签: sql sql-server substring


【解决方案1】:

如果我没听错,那么您需要使用 r2.date2 的日期部分和 r1.date1 的时间部分来更新 r1.date1。您可以使用以下查询:

update r1
    set r1.date1=cast(concat(cast( r2.date2 as date),' ',convert(varchar, r1.date1, 114)) as datetime)
    from table1 r1 join
         table2 r2 
         on r1.Number = r2.Number

【讨论】:

    【解决方案2】:

    您不应该为此使用convert。使用dateadddatediff 代替简单的算术运算。

    update r1
        set r1.date1 =
          dateadd(day,
            datediff(cast(r1.date1 as date), cast(r2.date2 as date)),
            r1.date1)
    from table1 r1
    join table2 r2 
        on r1.Number = r2.Number
    

    【讨论】:

      猜你喜欢
      • 2017-02-08
      • 2018-10-02
      • 2013-11-28
      • 2011-03-04
      • 2017-01-25
      • 2011-11-07
      • 1970-01-01
      • 2017-07-12
      • 2013-10-29
      相关资源
      最近更新 更多