【问题标题】:Convert dd/mm/yyyy VARCHAR to yyyy-dd-mm DATETIME in SQL在 SQL 中将 dd/mm/yyyy VARCHAR 转换为 yyyy-dd-mm DATETIME
【发布时间】:2018-01-08 09:55:53
【问题描述】:

我正在尝试将具有 dd/mm/yyyy 格式 (01/08/2017) 的 varchar(255) 字符串 (dp.Date) 转换为 yyyy-mm-dd format (2017-08-01) 中的日期时间。

我尝试使用CONVERT(DATETIME, dp.Date, 120),但最终得到以下错误消息。

将 char 数据类型转换为 datetime 数据类型导致 datetime 值超出范围。

【问题讨论】:

  • 你需要使用CONVERT给它一个格式,而不是CAST:CONVERT(DATETIME,dp.Date,120)`
  • 抱歉,我是想写 CONVERT...如您所见,我也使用了 CONVERT 的语法...编辑了帖子...感谢您的提醒!
  • 那么你有超出日期范围的字符串(如05/15/2017
  • SQL Server 中的 DATETIMEno format - 它是一个 8 字节 binary 值.....

标签: sql sql-server-2005


【解决方案1】:

我已经设法通过使用 CAST+SUBSTRING 来解决它。

cast(substring(dp.Date,7,4)+substring(dp.Date,4,2)+substring(dp.Date,1,2) AS datetime)

【讨论】:

    【解决方案2】:

    您可以尝试使用PARSENAME,如下所示。使用示例数据执行:

    DECLARE @TestTable TABLE (Id INT, [Date] VARCHAR (255));
    
    INSERT INTO @TestTable (Id, [Date]) VALUES
    (1, '01/08/2017'), (2, '21/09/2017'), (3, '15/12/2017');
    
    SELECT CAST(
                CONCAT(PARSENAME(DateValue, 1), '-', 
                       PARSENAME(DateValue, 2), '-', 
                       PARSENAME(DateValue, 3)) 
           AS DATETIME) AS [Date] 
    FROM (
        SELECT REPLACE([Date], '/', '.') AS DateValue FROM @TestTable
    ) D
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-25
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      相关资源
      最近更新 更多