Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL中选择查询/子查询中的值更新字段_Sql_Subquery_Updates - Fatal编程技术网

使用SQL中选择查询/子查询中的值更新字段

使用SQL中选择查询/子查询中的值更新字段,sql,subquery,updates,Sql,Subquery,Updates,您好,我需要从一个表的字段中选择一个特定的字符串,然后在同一个SQL数据库的不同表中填充另一个字段。我正在从字段中提取日期。字符位于两个下划线之间。我能够使用堆栈中上一篇文章的指导正确创建Select语句,但当我尝试将其与update语句融合时,会抛出一个错误。我检查了两个字段,它们是同一类型的NVARCHAR 提前谢谢 抛出的错误=当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式 我认为这就是您要寻找的,您的查询有几个问题,所以我不确定您要更新的列是什么 UPDATE

您好,我需要从一个表的字段中选择一个特定的字符串,然后在同一个SQL数据库的不同表中填充另一个字段。我正在从字段中提取日期。字符位于两个下划线之间。我能够使用堆栈中上一篇文章的指导正确创建Select语句,但当我尝试将其与update语句融合时,会抛出一个错误。我检查了两个字段,它们是同一类型的NVARCHAR

提前谢谢

抛出的错误=当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式


我认为这就是您要寻找的,您的查询有几个问题,所以我不确定您要更新的列是什么

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%';