我每月收到一个Excel电子表格,其中一个单元格在同一单元格中同时包含注释和日期。我将电子表格导入到SQL表中,需要提取最后8-10个字符(日期),并将它们从NVARCHAR格式转换为date格式。
例子:
From this:
Active/No Address 4/11/2016
2016/04/11
我遇到的最大挑战是表示月份和日期的数字不是固定长度的,它们可以是一个或两个字符。单字符日或月没有前导零。
我已经尝试了CHARINDEX, RIGHT(), LEFT(), REPLACE和SUBSTRING的每一个组合,我可以想到没有任何成功。
如能提供帮助,不胜感激。
我要使用的方法是反转字符串,找到第一个空格,然后格式化该文本块。此代码适用于具有单个值的多种情况,并且不会受到日期之前文本长度的影响。
Declare @1 VARCHAR(50) = 'Active/No Address 4/11/2016'
Declare @2 VARCHAR(50) = 'Active/No Address 9/3/2016'
Declare @3 VARCHAR(50) = 'Active/No Address 12/31/2016'
SELECT
REPLACE(CONVERT(DATE, RIGHT(@1,CHARINDEX(' ',REVERSE(@1),0)), 110), '-','/')
, REPLACE(CONVERT(DATE, RIGHT(@2,CHARINDEX(' ',REVERSE(@2),0)), 110), '-','/')
, REPLACE(CONVERT(DATE, RIGHT(@3,CHARINDEX(' ',REVERSE(@3),0)), 110), '-','/')
像这样?
declare @text nvarchar(max) = 'Active/No Address 4/11/2016';
declare @index int = charindex(' ', reverse(@text)) - 2;
declare @foo nvarchar(max) = substring(@text, len(@text) - @index, @index + 1);
select convert(datetime, @foo, 101)