我正在尝试从文本字段中提取日期,日期可以采用m/d/yy
,mm/d/yy
,m/dd/yy
或mm/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
谢谢!
答案 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