【问题标题】:Change date format in SQL Server 2012在 SQL Server 2012 中更改日期格式
【发布时间】:2015-06-03 21:12:41
【问题描述】:

在我导入 SQL Server 数据库的文件中,不同列中的日期格式不同。我一直有问题(例如)02-06 进入 2 月 6 日或 6 月 2 日。我将使用

SELECT [entry_date] = DATE_FORMAT([Date], GET_FORMAT(DATE,'EUR')) 
FROM table_name

要标准化数据库中的日期,但我首先需要一种方法来告诉服务器每个源列的日期格式是什么,以便 SQL Server 知道如何重新排列日期:

  • 02-06-2015 = dd-mm-yyyy
  • 06-02-2015 = mm-dd-yyyy
  • 2015-Jun-02 = yyyy-month-dd

【问题讨论】:

  • 您希望最终日期采用什么格式?你能把它也包括进去吗?
  • 可以是任意的,只要一致即可。最有可能是 dd-mm-yyyy。
  • 您可以考虑 Parse 函数并将其应用于查询中的输入日期:msdn.microsoft.com/en-us/library/hh213316.aspx
  • 暂存表中的所有列都是varchar或nvarchar,对吧?
  • 好的,一旦您将列作为具有已知格式的字符串值,您所要做的就是使用 convert 函数并为每个列使用适当的样式。

标签: sql sql-server date datetime sql-server-2012


【解决方案1】:

如果每列的格式不同,您可能会这样做:

select convert(varchar,cast('06-02-2015' as date) ,105) col1
      ,convert(varchar,cast('02-06-2015' as date) ,110) col2
      ,convert(varchar,cast('2015-Jun-02' as date),105) col3

结果集:

|col1       ||       col2        ||     col3     |
|02-06-2015 ||       02-06-2015  ||     02-06-2015|

【讨论】:

  • 这在服务器中工作,但完全破坏了用于导入数据的 SSIS 包。 SSIS 将源数据移动到临时表中,然后我在触发器中使用带有日期转换的脚本来格式化数据并将其移动到主表中。它告诉我“从字符串转换日期和/或时间时转换失败。”
  • 对不起,我刚刚看到这个,您在 SSIS 部分的哪个部分使用此转换?是在加载暂存表时还是在最终加载期间进行后暂存?并不是说它可能会有所不同,但我认为您会收到此错误的唯一其他原因是您的数据未正确“格式化”以转换为实际日期。
  • 所有 Excel 数据格式正确。我仔细检查了。转换发生在临时表和主表之间。在最后进入主表之前,一切都是 nvarchar,主表具有该列的日期格式。当数据为 nvarchar 格式时,我仍然会收到日期错误,这很奇怪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多