使用文本字段中的不同格式提取日期

时间:2017-08-15 02:53:27

标签: sql-server-2008 date datetime

我正在尝试从文本字段中提取日期,日期可以采用m/d/yymm/d/yym/dd/yymm/dd/yy的格式。我希望查询将日期返回为Datetime(理想情况下的格式为mm/dd/yyyy),以下是一些示例:

表名:tblNote 字段名称:Notetext

注意摘要:星期一1/2/99 ......

报告:02/3/06星期二......

用户呼吁:星期三3/11/98 ......

客户反馈:周四04/22/15 ....

有一种简单的方法可以实现这一点,提前谢谢!

这是我的表格: CREATE TABLE [dbo]。[myNote](     [NOTETEXT] varchar NULL )

插入mynote VALUES ('注释摘要:星期一4/1/17', - m / d / yy ('报告:周二04/1/17'), - mm / d / yy ('用户呼吁:星期三4/01/11', - m / dd / yy ('客户反馈:周四04/01/17'), - mm / dd / yy ('被告注意:7/13/11 ......灵巧。死者......撤回案件...... EJG')

SELECT notetext,         CONVERT(Date,SUBSTRING(notetext,CHARINDEX('/',notetext)-2,8),1)As DateAsDate 来自myNote

- 结果: notetext | DateAsDate ----- | ----- 注释摘要:星期一4/1/17 | 2017年4月1日 报告:04/1/17周二| 2017年4月1日 用户呼吁:4/01/11星期三| 2011-04-01 客户反馈:04/01/17周四| 2017年4月1日 被告注:7/13/11 ......灵巧。死者......案件撤回...... EJG | 2011-07-13

到目前为止,一切都很好,但是,我复制了一张来自我的转换表的记录,它看起来与我编写的第5条记录相同,但是,当我运行相同的查询时,我收到以下错误。

Msg 241,Level 16,State 1,Line 1 从字符串转换日期和/或时间时转换失败。

这就是我现在的表格:

备注摘要:星期一4/1/17 报告:周二04/1/17 用户呼吁:星期三4/01/11 客户反馈:周四04/01/17 被告注:7/13/11 ......灵巧。死者......案件撤回...... EJG 被告注:7/13/11 ......灵巧。死者......案件撤回...... EJG

这是我的数据库与表的副本,您应该能够恢复数据库并复制问题。 https://drive.google.com/file/d/0B_MJBFXS2FWfWVBBdVhkS1R6RG8/view?usp=sharing

谢谢!

1 个答案:

答案 0 :(得分:0)

嗯,幸运的是,格式几乎相同,只是按月份或日期的位数推迟。
这意味着您可以简单地使用CONVERT,因为SQL Server将知道如何处理此问题。

创建并填充样本表(在将来的问题中保存此步骤):

DECLARE @T AS TABLE
(
    DateAsString varchar(8)
)

INSERT INTO @T VALUES
('4/1/17'),   -- m/d/yy
('04/1/17'),  -- mm/d/yy
('4/01/17'),  -- m/dd/yy
('04/01/17') -- mm/dd/yy

查询:

SELECT  DateAsString,
        CONVERT(Date, DateAsString, 1) As DateAsDate
FROM @T

结果:

DateAsString    DateAsDate
4/1/17          01.04.2017 00:00:00
04/1/17         01.04.2017 00:00:00
4/01/17         01.04.2017 00:00:00
04/01/17        01.04.2017 00:00:00

You can see a live demo on rextester.