【问题标题】:How to convert a varchar with month names into datetime in SQL Server如何在 SQL Server 中将带有月份名称的 varchar 转换为日期时间
【发布时间】:2018-11-30 02:09:21
【问题描述】:

我有一个包含一些数据的平面文件,我将这些数据插入到 SQL Server 数据库的表中。

平面文件中的一列(比如时间戳)的格式为:09-OCT-17 08.22.04.000000 PM。我想在插入表格之前/期间将其转换为日期时间格式。

谁能告诉我这是怎么做到的?谢谢!

平面文件输入值类似于09-OCT-17 08.22.04.000000 PM, 09-OCT-17 09.31.36.000000 PM. 预期输出为:2017-10-09 08:22:04.000, 2017-10-09 09:31:36.000

【问题讨论】:

  • 您能否至少添加两行平面文件,并将这些行添加到您的问题中...另外,请添加您想要的预期日期格式。
  • 那是一种可怕的日期格式。我查看了 BOL 上的各种转换掩码,但找不到合适的掩码。也许你会有更好的运气。 docs.microsoft.com/en-us/sql/t-sql/functions/…。我很可能只是编写一个 case 语句,将每个缩写映射到正确的月份整数,并在必要时 replace() 它。或者用不同的语言对其进行预处理。例如,C# 可以使用ToString() 函数进行自定义转换映射
  • 晚上 9.31.36.0000 应该是 9:31:36 吗?小时是 21,而不是 9。

标签: sql-server datetime type-conversion ssms varchar


【解决方案1】:

如前所述,这是一种可怕的开始格式,但一些基本的字符串操作可以轻松完成。仍然不确定为什么晚上 9 点应该是 9 点。在适当的日期时间,它将是 21。这可以得到正确的时间。如果您真的想始终获得时间并忽略 AM/PM,您可以添加另一个替换以将 PM 替换为 AM。

declare @Something varchar(50) = '09-OCT-17 08.22.04.000000 PM'

select convert(datetime2, stuff(replace(@Something, '.', ':'), 20, 3, ''))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-09
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 2018-12-16
    • 1970-01-01
    相关资源
    最近更新 更多