【问题标题】:How to modify incorrect date in a SQL Server database column in C#如何在 C# 中修改 SQL Server 数据库列中的错误日期
【发布时间】:2017-01-12 13:15:11
【问题描述】:

我的 SQL Server 数据库中有一个 nvarchar 数据类型的列,我在其中存储了 ####/##/## 格式的日期。由于我的错误,一些日期以##/##/#### 格式存储。

如何将数据库中的所有日期修改为 ####,##,## 格式?

示例:01/01/20162016/01/01

【问题讨论】:

  • 坏数据是 mm/dd/yyyy(美国)还是 dd/mm/yyyy(几乎所有其他地方)
  • 他们是一种名为date 的数据类型,用于保存日期,那么您为什么要尝试与nvarchar 妥协
  • 如果您有心情修复数据,为什么不正确地改用datetime2date 列?
  • 不要将数据库中的日期存储为字符串。使用正确的数据类型。仅在您实际需要向用户显示的位置转换为字符串。
  • 问题是字段类型,而不是格式。您应该将日期存储在日期类型的字段(日期、日期时间等)中。修复您的表架构,而不是您的数据

标签: c# sql-server date


【解决方案1】:

使用CONVERT 函数。编写简单的 SQL 查询:

UPDATE YourTable 
-- get Date from nvarchar and format to yyyy/mm/dd
SET DateColumn = CONVERT(nvarchar,CONVERT(DATE, DateColumn, 103), 111)
-- only in rows that can be parsed from dd/mm/yyyy format
WHERE TRY_CONVERT(DATE, DateColumn, 103) IS NOT NULL 

103 - dd/mm/yyyy 格式。 111 - yyyy/mm/dd 格式。 check this article

但实际上您确实应该将日期存储在 DATE 类型列而不是 NVARCHAR

【讨论】:

  • 我收到此错误:'TRY_CONVERT' 不是可识别的内置函数名称。
  • @R.F.V 您使用什么版本的 MS SQL?是2012版功能
  • Microsoft SQL Server 2012 - 11.0.2100.60
  • @R.F.V 奇怪...我在我的 2012 db 上测试过 - 炒锅很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 2018-03-10
  • 2017-12-20
  • 2014-04-09
相关资源
最近更新 更多