【问题标题】:Porting a query with respect to SQLServer移植关于 SQLServer 的查询
【发布时间】:2023-04-07 08:03:01
【问题描述】:

我在 Vectorwise DB 中有一个查询,

UPDATE current_load_details cld
 FROM date_dim dd
SET current_date_sk = dd.date_sk
,batchstring = date_part('YEAR', dd.dateval) || CASE 
     WHEN length(date_part('MONTH', dd.dateval)) = 1
         THEN '0' || date_part('MONTH', dd.dateval)
     ELSE date_part('MONTH', dd.dateval)
     END || CASE 
    WHEN length(date_part('DAY', dd.dateval)) = 1
        THEN '0' || date_part('DAY', dd.dateval)
     ELSE date_part('DAY', dd.dateval)
     END

     ,is_last_run_successful = 0
          WHERE cld.load_date = dd.dateval

我需要将它迁移到 SQLSERVER, 这个我试过了,

UPDATE cld.current_load_details 
 FROM dd1.date_dim 
SET current_date_sk = dd1.date_sk
,batchstring = datepart(yyyy, dd1.dateval) OR CASE 
    WHEN length(datepart(mm, dd1.dateval)) = 1
        THEN '0' OR datepart(mm, dd.dateval)
    ELSE datepart(mm, dd1.dateval)
    END OR CASE 
    WHEN length(datepart(dd, dd1.dateval)) = 1
        THEN '0' OR datepart(dd1, dd.dateval)
    ELSE datepart(dd, dd1.dateval)
    END

,is_last_run_successful = 0
     WHERE cld.load_date = dd1.dateval

它仍然报错。请帮助。

【问题讨论】:

    标签: sql-server sql-update migrate vectorwise


    【解决方案1】:

    看起来|| 被用来将日期连接(而不是逻辑或)成yyyymmdd 格式,这在 T-SQL 中可以通过转换来完成:

     convert(varchar(8), dd1.dateval, 112)
    

    给予

    UPDATE 
        cld.current_load_details 
    SET 
        current_date_sk = dd1.date_sk,
        batchstring =  convert(varchar(8), dd1.dateval, 112),
        is_last_run_successful = 0
    FROM 
        dd1.date_dim
        ??? 
    WHERE cld.load_date = dd1.dateval
    

    ???是你想define a JOIN的地方。

    【讨论】:

    • 似乎 "WHERE cld.load_date = dd.dateval" 是向量查询中的 JOIN 条件。所以 OP 不需要任何额外的连接。
    猜你喜欢
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2015-01-25
    • 2020-08-21
    • 1970-01-01
    • 2011-09-29
    相关资源
    最近更新 更多