我将一些数据从excel工作表上传到sql中的表中,我想使用插入到列PPRName
中并插入到另一个表[Verify]
中的一部分字符串。
插入时列中的数据如下所示:
2018年8月 [西北:建筑MTP021-建筑和民用建筑:砌筑NQF 3]
我要插入字符串的这一部分:
西北:建筑MTP021-建筑和民用建筑:砌体NQF 3
进入[Verify]
列中每个PPR名称的另一个表PPRName
。 PPR的名称长短不一,但格式相同。
我还想提取 2018年8月并将其转换为日期并插入到我的表格[Verify]中。
我不确定如何使用Charindex
和Substrings
实现这一目标。
我尝试了这个,但是没有返回数据
select SUBSTRING([PPR_Caption],charindex('[',[PPR_Caption]),charindex([PPR_Caption],']'))
FROM [dbo].[PPRS]
答案 0 :(得分:0)
您错误地使用了第二个CHARINDEX
,并且错误地使用了SUBSTRING
命令。
SELECT SUBSTRING(PPR_Caption, CHARINDEX("[", PPR_Caption) + 1, CHARINDEX("]", PPR_Caption) - CHARINDEX("[", PPR_Caption) - 1)
FROM PPRS
SUBSTRING
使用起点和长度,而不是起点和终点。要获得长度,请使用终点并减去起点(并用-1校正1位置偏移)。
在第二个CHARINDEX
中,您切换了要搜索的字符串和要查找的字符串。
答案 1 :(得分:0)
这样的字符串操作在SQL 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非常擅长猜测转换日期的格式,因此它实际上将转换日期而不包含月份中的日期。