【发布时间】: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