【问题标题】:SQL Server: best way to insert "mm/dd/yyyy" into a "date" or "datatime2" column?SQL Server:将“mm/dd/yyyy”插入“date”或“datetime2”列的最佳方法?
【发布时间】:2019-03-31 16:39:40
【问题描述】:

我有一堆以mm/dd/yyyy 形式存储在CSV 中的值。一个例子是06/26/2017。我发现我无法将其插入声明为datedatetime2 类型的列中。我可以做的是先将该(空)列修改为varchar,然后再插入。

然而此时,在作为 varchars 插入后,如何将此列转换为“date”或“datatime2”?

尝试设置系统范围的格式不起作用:

sql> SET DATEFORMAT 'mm/dd/yyyy'
[2019-03-31 09:42:04] [S0001][2741] SET DATEFORMAT date order 'mm/dd/yyyy' is invalid.

【问题讨论】:

  • 试试SET DATEFORMAT mdy
  • 将数据加载到所有列都是字符串的临时表中,并在数据库中进行转换。

标签: sql sql-server datetime sql-insert


【解决方案1】:

如果列的数据类型是date,则将字符串转换为date

convert(date, '03/31/2019', 101)

然后插入它。
请参阅demo
阅读有关convert() 的更多信息
编辑
创建一个 varchar 列和一个日期列。在 varchar 列中插入值,当过程完成时,通过将每个值转换为日期来更新日期列,例如:

UPDATE tablename
SET datecolumn = convert(date, varcharcolumn, 101) 

之后,您可以删除 varchar 列。

【讨论】:

  • 嘿,问题是我无法将这些值插入到 date/datetime2 列中。我所能做的就是首先将这些值插入到 varchar 列中。这是预期的吗?
  • 您不会按原样插入这些值。您将它们转换为日期,然后插入它们。
  • 我明白 - 但是这些是 CSV 文件中的字符串文字。有没有办法批量上传这样的文件并即时转换?
  • 好的,我错过了你想直接从 csv 插入它们。查看我编辑的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 2020-02-24
相关资源
最近更新 更多