我每月都会收到一个Excel电子表格,其中包含一个单元格,其中包含同一单元格中的注释和日期。我将电子表格导入到SQL表中,需要提取最后8-10个字符(日期),并将它们从NVARCHAR格式转换为日期格式。
示例:
:活动/地址为4/11/2016
To this: 2016/04/11
我面临的最大挑战是,代表月份和日期的数字不是固定长度,它们可以是一个或两个字符。单个字符的日期或月份没有前导零。
我尝试了CHARINDEX、RIGHT()、LEFT()、REPLACE和SUBSTRING的每一个组合,但都没有成功。
在这方面提供援助将是非常感谢的。
发布于 2016-06-28 19:31:12
我将使用的方法是反转字符串,找到第一个空格,然后格式化该文本块。此代码适用于具有单个值、月份和天数的多个情况,并且不会受到日期之前文本长度的影响。
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), '-','/')
发布于 2016-06-28 19:30:07
是像这样吗?
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)
https://stackoverflow.com/questions/38084349
复制相似问题