【问题标题】:Date Conversion from ISO format to normal format从 ISO 格式到普通格式的日期转换
【发布时间】:2020-01-23 08:02:49
【问题描述】:

我正在尝试将 ISO 格式日期转换为 SQL 中的正常格式日期。但我遇到了同样的错误,如下所示

从字符串转换日期和/或时间时转换失败

这是我要转换的日期。我也尝试更换 T 但没有运气。我什至尝试过铸造,不同的日期格式。格式函数仅适用于日期数据类型。

DECLARE @stringDate nvarchar(50)
SET @stringDate = '20191230T095931.331'

SELECT 
    @stringDate AS StringDate,
    CONVERT(datetime2, @stringDate, 126) AS ConvertedDate

输入日期采用这种格式'20191230T095931.331',我希望它采用 'MM-dd-yyyy HH:mm:ss:fffff' 格式。

谁能帮我转换一下这个日期格式?

【问题讨论】:

标签: sql-server sql-server-2016


【解决方案1】:

通常没有有充分的理由在数据库中强制使用日期格式。这应该始终在表示层中完成(数据库没有表示层,只有客户端工具)。您的要求和方法表明您可能会误解某些内容。如果您能给我们一些关于您为什么要这样做的背景信息,我们可以澄清一下。

如果你只是想要一个答案,试试这个

DECLARE @stringDate nvarchar(50)
SET @stringDate = '20191230T095931.331'

DECLARE @ISOString VARCHAR(50)
SET 
@ISOString = 
-- Date portion
LEFT(@stringDate,4) + '-' + SUBSTRING(@stringDate,5,2) + '-' + SUBSTRING(@stringDate,7,2) +
-- Time portion
SUBSTRING(@stringDate,9,3)+':'+SUBSTRING(@stringDate,12,2)+':'+SUBSTRING(@stringDate,14,2)+RIGHT(@stringDate,4)

SELECT 
    @stringDate AS StringDate,
    @ISOString As ISOFormatString,
    CONVERT(DATETIME,@ISOString,126) As IAmADate,
    FORMAT(CONVERT(DATETIME,@ISOString,126),'MM-dd-yyyy HH:mm:ss:fffff') IAmAString

【讨论】:

  • 非常感谢。这行得通。我们处理股票数据,这些数据来自交易台。他们有一定的日期时间戳,以这种格式存储。我们必须将其转换为报告所需的格式
  • 如果此数据要进入数据库,我强烈建议您使用正确的数据类型存储它,即DATETIME。然后您可以对其进行排序、对其执行日期算术、按照您喜欢的方式对其进行格式化,而不必担心格式不明确。
  • 是的,我将其作为日期时间进行,这就是为什么希望将其转换为这种格式的原因。非常感谢尼克。
猜你喜欢
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 2018-10-25
相关资源
最近更新 更多