使用SQL中选择查询/子查询中的值更新字段
您好,我需要从一个表的字段中选择一个特定的字符串,然后在同一个SQL数据库的不同表中填充另一个字段。我正在从字段中提取日期。字符位于两个下划线之间。我能够使用堆栈中上一篇文章的指导正确创建Select语句,但当我尝试将其与update语句融合时,会抛出一个错误。我检查了两个字段,它们是同一类型的NVARCHAR 提前谢谢 抛出的错误=当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式使用SQL中选择查询/子查询中的值更新字段,sql,subquery,updates,Sql,Subquery,Updates,您好,我需要从一个表的字段中选择一个特定的字符串,然后在同一个SQL数据库的不同表中填充另一个字段。我正在从字段中提取日期。字符位于两个下划线之间。我能够使用堆栈中上一篇文章的指导正确创建Select语句,但当我尝试将其与update语句融合时,会抛出一个错误。我检查了两个字段,它们是同一类型的NVARCHAR 提前谢谢 抛出的错误=当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式 我认为这就是您要寻找的,您的查询有几个问题,所以我不确定您要更新的列是什么 UPDATE
我认为这就是您要寻找的,您的查询有几个问题,所以我不确定您要更新的列是什么
UPDATE
l
SET l.Date_Field=
CASE
WHEN CHARINDEX('_',(SUBSTRING([DisplayName],CHARINDEX('_',[DisplayName],1)+1,99))) = 0
THEN LTRIM(RTRIM(SUBSTRING([DisplayName],CHARINDEX('_',[DisplayName],1)+1,99)))
ELSE LTRIM(RTRIM(SUBSTRING(
/* <text>> */ [DisplayName],
/* <start > */ CHARINDEX('_',[DisplayName],1) + 1,
/* <length> */ CHARINDEX('_', SUBSTRING([DisplayName],
CHARINDEX('_', [DisplayName], 1) + 1, 99)) - 1
) ) )
END
FROM
[DMSEngine_HR].[dbo].[IndexForm_Legiant] l
INNER JOIN [DMSEngine_HR].[dbo].[Document] d
ON
d.DocumentID = l.DocumentID
AND DocumentPath like'%legiant%';
您的内部查询不相关。另外,我怀疑你是否需要外层连接。这基本上就是我认为您需要下推到子查询的逻辑。非常感谢,这非常好。必须添加/到它的格式字段,使其看起来像一个日期,并且工作得非常出色。
UPDATE
l
SET l.Date_Field=
CASE
WHEN CHARINDEX('_',(SUBSTRING([DisplayName],CHARINDEX('_',[DisplayName],1)+1,99))) = 0
THEN LTRIM(RTRIM(SUBSTRING([DisplayName],CHARINDEX('_',[DisplayName],1)+1,99)))
ELSE LTRIM(RTRIM(SUBSTRING(
/* <text>> */ [DisplayName],
/* <start > */ CHARINDEX('_',[DisplayName],1) + 1,
/* <length> */ CHARINDEX('_', SUBSTRING([DisplayName],
CHARINDEX('_', [DisplayName], 1) + 1, 99)) - 1
) ) )
END
FROM
[DMSEngine_HR].[dbo].[IndexForm_Legiant] l
INNER JOIN [DMSEngine_HR].[dbo].[Document] d
ON
d.DocumentID = l.DocumentID
AND DocumentPath like'%legiant%';