首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除上次空白之前的字符,从NVARCHAR将结果转换为日期

删除上次空白之前的字符,从NVARCHAR将结果转换为日期
EN

Stack Overflow用户
提问于 2016-06-28 19:06:27
回答 2查看 55关注 0票数 1

我每月都会收到一个Excel电子表格,其中包含一个单元格,其中包含同一单元格中的注释和日期。我将电子表格导入到SQL表中,需要提取最后8-10个字符(日期),并将它们从NVARCHAR格式转换为日期格式。

示例:

活动/地址为4/11/2016

To this: 2016/04/11

我面临的最大挑战是,代表月份和日期的数字不是固定长度,它们可以是一个或两个字符。单个字符的日期或月份没有前导零。

我尝试了CHARINDEX、RIGHT()、LEFT()、REPLACE和SUBSTRING的每一个组合,但都没有成功。

在这方面提供援助将是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-28 19:31:12

我将使用的方法是反转字符串,找到第一个空格,然后格式化该文本块。此代码适用于具有单个值、月份和天数的多个情况,并且不会受到日期之前文本长度的影响。

代码语言:javascript
运行
复制
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), '-','/')  
票数 1
EN

Stack Overflow用户

发布于 2016-06-28 19:30:07

是像这样吗?

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38084349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档