SQL 服务器将大小写与 convert 语句结合起来

SQL Server combine case with convert statement

你好,我坚持这个查询,我想要的是得到一列“fecha_registro_convertida”,其中包含 case 语句的条件以及 CONVERT 语句,这样我就可以使用案例陈述

SELECT top 50 rs_IDCliente idCliente, CONVERT(datetime, 
           SWITCHOFFSET(CONVERT(datetimeoffset, 
                                c.rs_fecharegistro), 
                        DATENAME(TzOffset, SYSDATETIMEOFFSET()))) 
   AS fecha_registro_convertida,
CASE WHEN rs_fecharegistro IS NULL THEN c.CreatedOn ELSE rs_fecharegistro END 
          rs_fecharegistro, 
          isnull(BirthDate, '19900101') fechaNacimiento,
          suc.rs_IDSucursalregistro AS SucursalRegistro
FROM NMP_MSCRM.dbo.contact c
INNER JOIN NMP_MSCRM.dbo.rs_sucursalregistro suc
ON c.rs_SucursalRegistro=suc.rs_sucursalregistroId

Image of the records that i get

发布的 SQL 提供 5 列:fecha_registro_convertida, fecha_registro_convertida, rs_fecharegistro, fechaNacimiento, SucursalRegistro

根据评论,您希望结果中只有 4 列:fecha_registro_convertida, fecha_registro_convertida, fechaNacimiento, SucursalRegistro

再次根据评论,我相信您希望 fecha_registro_convertidars_fecharegistro 列上 SWITCHOFFSET 的结果,或者(如果 rs_fecharegistro 的值是null) 在列 c.rs_fecharegistro.

这很容易解决,只需在 CONVERT 函数中使用 ISNULL。 IE。替换

CONVERT(datetimeoffset, c.rs_fecharegistro)

CONVERT(datetimeoffset, ISNULL(c.rs_fecharegistro, c.CreatedOn))

基于这些假设,您需要的 SQL 可能是:

SELECT top 50 
     rs_IDCliente AS idCliente
    ,CONVERT(datetime, SWITCHOFFSET(CONVERT(datetimeoffset, ISNULL(c.rs_fecharegistro, c.CreatedOn), DATENAME(TzOffset, SYSDATETIMEOFFSET()))) AS fecha_registro_convertida
    ,ISNULL(BirthDate, '19900101') AS fechaNacimiento
    ,suc.rs_IDSucursalregistro AS SucursalRegistro

FROM       NMP_MSCRM.dbo.contact c
INNER JOIN NMP_MSCRM.dbo.rs_sucursalregistro suc
        ON c.rs_SucursalRegistro=suc.rs_sucursalregistroId

(请注意,@Larnu 在评论中指出,结果行是不确定的,因为您有 TOP 50 限制但没有 ORDER BY 子句 - 但我并不想这样做解决那个问题)。