sql server语言 - 删除最后一个空格前的字符,将结果从NVARCHAR转换为DATE



我每月收到一个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)

最新更新