我将一些数据从excel工作表上传到sql中的一个表中,我希望使用插入到列PPRName中并插入到另一个表[Verify]中的部分字符串。
插入时列中的数据如下所示:
2018年8月 NW:建筑MTP021 -建筑和民用建筑:砌体NQF 3
我想插入字符串的这一部分:
NW:建筑MTP021 -建筑和民用建筑:砌体NQF 3
进入另一个表[Verify]中,用于PPRName列中的每个PPR名称。PPRs的名称长度各不相同,但都以相同的格式出现。
我还想提取2018年8月的,并将其作为日期并插入到我的表中验证。
我不知道如何使用Charindex和Substrings来实现这一点。
我试过了,但没有返回数据。
select SUBSTRING([PPR_Caption],charindex('[',[PPR_Caption]),charindex([PPR_Caption],']'))
FROM [dbo].[PPRS] 发布于 2018-12-05 11:57:59
您错误地使用了第二个CHARINDEX,并且错误地使用了SUBSTRING命令。
SELECT SUBSTRING(PPR_Caption, CHARINDEX("[", PPR_Caption) + 1, CHARINDEX("]", PPR_Caption) - CHARINDEX("[", PPR_Caption) - 1)
FROM PPRSSUBSTRING使用起点和长度,而不是起点和终点。要获得长度,请使用端点并减去起始点(并用-1校正偏移量为1的位置)。在第二个CHARINDEX中,您切换了要搜索的字符串和要查找的字符串。
发布于 2018-12-05 12:01:30
在Server中,这样的字符串操作很麻烦。
试试这个:
select replace(v2.str_rest, ' ]', '') as name, cast(str_start as date) as dte
from (values ('August 2018 [ NW: Construction MTP021 - Building and Civil Construction: Masonry NQF 3 ]')
) v(str) cross apply
(values (stuff(v.str, 1, charindex('[', str) + 1, ''), substring(v.str, 1, charindex('[', str) -1))
) v2(str_rest, str_start);SQL Server非常擅长猜测转换日期的格式,因此实际上它将在没有月份日期的情况下转换日期。
https://stackoverflow.com/questions/53630825
复制相似问题