【问题标题】:Convert string date to GETDATE() format in SQL server在 SQL Server 中将字符串日期转换为 GETDATE() 格式
【发布时间】:2020-01-17 14:53:51
【问题描述】:

我们有一个表员工,其列 LastUpdated (datetime)ExitDate (datetime)ReleaseDate (varchar(50))

此处显示表格中的日期:

+-------------------------+----------------------+
|       LastUpdated       |     ReleaseDate      |
+-------------------------+----------------------+
| 2019-05-24 01:19:21.597 | 4/8/2016 7:00:00 AM  |
| 2019-05-24 02:05:26.130 | 3/20/2007 7:00:00 AM |
| 2019-05-24 01:57:44.810 | 5/14/2007 7:00:00 AM |
| 2019-05-24 01:48:40.483 | 3/16/2010 7:00:00 AM |
| 2019-05-24 01:11:41.290 | 11/8/2018 8:00:00 AM |
+-------------------------+----------------------+

现在我想将ReleaseDate 列值转换为LastUpdated 列格式(yyyy-MM-dd HH:mm:ss)并将值更新为ExitDate 列。

LastUpdated 列值是在 SQL Server 中使用 GETDATE() 插入的。

有人可以帮忙吗?

【问题讨论】:

  • 更新后,您需要更改列的数据类型并停止将日期存储为字符串。选择正确的数据类型非常很重要。 sqlblog.org/2009/10/12/…
  • 日期没有格式,它们是二进制值。你有一个严重的错误,存储字符串而不是日期。修复错误。严重地。否则,您将无法索引或查询该字段。在您发布的图片中,5/14/2007大于4/8/2016

标签: sql sql-server string datetime


【解决方案1】:

您可以使用update

update employee
     set ExitDate = convert(datetime, ReleaseDate, 101);

但是,将日期值存储为其他格式并不是一个好习惯。

【讨论】:

    【解决方案2】:

    您可以将字符串解析为日期,然后将日期转换为所需格式的字符串。日期时间转换支持的字符串格式记录在 here

    比如:

    update employee set ReleaseDate = convert(varchar(50), convert(datetime,ReleaseDate, 101), 121);
    

    如果所有行都采用相同的日期格式。如果日期格式不同,您可以尝试:

    update employee set ReleaseDate = convert(varchar(50), convert(datetime,ReleaseDate), 121);
    

    使用您当前的文化设置和 SQL Server 的许可转换规则进行转换。

    但您应该在可能的情况下更改列的数据类型:

    alter table employee alter column ReleaseDate datetime
    

    或添加检查约束以强制应用程序确保没有插入其他格式。

    alter table employee add constraint [ck_EnforceReleaseDateFormat_YYYY-MM-DD HH:MM:SS]
    check (ReleaseDate = convert(varchar(50), convert(datetime,ReleaseDate, 121), 121))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多