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_convertida
是 rs_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
子句 - 但我并不想这样做解决那个问题)。
你好,我坚持这个查询,我想要的是得到一列“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_convertida
是 rs_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
子句 - 但我并不想这样做解决那个问题)。