【问题标题】:Changing the format of an AS column from text to datetime将 AS 列的格式从文本更改为日期时间
【发布时间】:2017-07-04 10:14:46
【问题描述】:

我正在使用此代码从文本字段中提取日期和时间。

    SELECT
    LEFT(SUBSTRING(eventcomments,
    CHARINDEX('Off-Site:', eventcomments) + 9, 17),
    CHARINDEX('Off-Site:', eventcomments)) AS Departed

创建一个 Departed 列 dd/mm/yyyy hh:mm

我想将它从文本转换为日期时间格式,所以我添加了以下代码。

    SELECT
    CONVERT(datetime,LEFT(SUBSTRING(eventcomments,
    CHARINDEX('Off-Site:', eventcomments) + 9, 17),
    CHARINDEX('Off-Site:', eventcomments))) AS Departed

但我收到以下错误消息,

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

我的问题是,

如何将 Departed 列的格式从文本更改为日期时间格式。

【问题讨论】:

  • 要从原始文本中提取日期/时间值作为字符串,我将使用stackoverflow.com/questions/44885387/… 的解决方案,然后我将使用CONVERT(DATETIME, DateTimeExtracted, 103) 将提取的d/t 值从字符串转换为DATETIME
  • 从字符串中提取日期和时间可能是一项棘手的工作。如果可能的话,建议您通过将日期和时间存储在它们自己的数据类型中来避免这种情况。您需要找到引发此错误的行。最可能的原因是它们的格式不一致。
  • @Bogdan Sahlean 嘿,伙计,因为我需要从不能使用 PATINDEX 的文本中获取两个日期,所以我选择使用 CHARINDEX,因为我可以多次使用它。
  • 那么这个问题应该指定源字符串有两个(或更多?)日期/时间值,这些值应该从原始文本中提取,然后转换为正确的数据类型?上次我要求您添加一些示例日期。你能用这个信息更新这个问题吗?
  • 我不希望有人为我编写所有代码,我想知道如何去做,这样我就可以把它拿走并自己处理。如果我得到一个示例,那么我可以针对其余的查询对其进行调整,并且我正在学习。我写了我的问题是为了给我足够的信息来做到这一点。感谢您抽出宝贵时间,我已经使用您之前的回答来成长和前进我非常感谢您的努力。

标签: sql sql-server datetime ssms charindex


【解决方案1】:

只需使用 CAST 函数:

SELECT CAST(LEFT(SUBSTRING(eventcomments,
            CHARINDEX('Off-Site:', eventcomments) + 9, 17),
            CHARINDEX('Off-Site:', eventcomments)) 
          AS DATETIME) AS Departed

点赞SELECT CAST('05/10/1983 19:00' as datetime)

【讨论】:

  • 我的日期数据已损坏,因此我将日期和时间分隔到各自的列中,并仅使用time 转换(如@destination-data 建议的那样)运行,这是关键信息。如果我的桌子上的数据没有损坏,那么这将非常有效。谢谢。
猜你喜欢
  • 2019-02-05
  • 2020-12-22
  • 2020-01-30
  • 1970-01-01
  • 2019-09-16
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
相关资源
最近更新 更多