删除最后一个空白之前的字符,将结果从 NVARCHAR 转换为 DATE
Remove characters before the last blank, convert result to DATE from NVARCHAR
我每月收到一份 Excel 电子表格,其中一个单元格包含评论和日期。我将电子表格导入 SQL table 并需要提取最后 8-10 个字符(日期)并将它们从 NVARCHAR 格式转换为 DATE 格式。
示例:
来自: Active/No 地址 4/11/2016
对此: 2016/04/11
我遇到的最大挑战是代表月份和日期的数字不是固定长度的,它们可以是一个或两个字符。单字符日或月没有前导零。
我已经尝试了所有我能想到的 CHARINDEX、RIGHT()、LEFT()、REPLACE 和 SUBSTRING 的组合,但都没有成功。
我们将不胜感激。
像这样?
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)
我会采用的方法是反转字符串,找到第一个 space,然后格式化该文本块。此代码适用于具有单值月份和日期的多个案例,并且不会受到日期前文本长度的影响。
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), '-','/')
我每月收到一份 Excel 电子表格,其中一个单元格包含评论和日期。我将电子表格导入 SQL table 并需要提取最后 8-10 个字符(日期)并将它们从 NVARCHAR 格式转换为 DATE 格式。
示例:
来自: Active/No 地址 4/11/2016
对此: 2016/04/11
我遇到的最大挑战是代表月份和日期的数字不是固定长度的,它们可以是一个或两个字符。单字符日或月没有前导零。
我已经尝试了所有我能想到的 CHARINDEX、RIGHT()、LEFT()、REPLACE 和 SUBSTRING 的组合,但都没有成功。
我们将不胜感激。
像这样?
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)
我会采用的方法是反转字符串,找到第一个 space,然后格式化该文本块。此代码适用于具有单值月份和日期的多个案例,并且不会受到日期前文本长度的影响。
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), '-','/')