Case não reconhece campo Hora convertido do campo DataHora

SQL Server

14/01/2022

Bom Dia ,,uma ajuda iniciante perdido
Converti o campo DataHora obtendo o resultado que preciso no campo Hora, mas não consigo utilizar o resulta para criar as informações na coluna PERIODO, retorna resultado ( Msg 207, Level 16, State 1, Line 5
Nome de coluna 'Hora' inválido.)

SELECT
[DataHora],
Convert (nvarchar (5), CONVERT (time,DataHora, 103))Hora,

CASE WHEN Hora BETWEEN '00:01' AND '06:00' THEN 'Das 00:01 às 06:00'
WHEN Hora BETWEEN '06:01' AND '12:00' THEN 'Das 06:01 às 12:00'
WHEN Hora BETWEEN '12:01' AND '18:00' THEN 'Das 12:01 às 18:00'
WHEN Hora BETWEEN '18:01' AND '23:59' THEN 'Das 18:01 às 23:59'
WHEN Hora is null THEN 'INCERTO'
WHEN Hora = '00:00' THEN 'INCERTO'
END PERIODO

FROM [GEOEST].[dbo].[VW_GeoRacOcr]
Edivaldo Souza

Edivaldo Souza

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

14/01/2022

o campo virtual Hora só é visível após obter o resultset.
pode ser usado assim:
SELECT
	[DataHora],
	CASE	WHEN Hora BETWEEN '00:01' AND '06:00' THEN 'Das 00:01 às 06:00'
			WHEN Hora BETWEEN '06:01' AND '12:00' THEN 'Das 06:01 às 12:00'
			WHEN Hora BETWEEN '12:01' AND '18:00' THEN 'Das 12:01 às 18:00'
			WHEN Hora BETWEEN '18:01' AND '23:59' THEN 'Das 18:01 às 23:59'
	ELSE
		'INCERTO'
	END PERIODO
FROM
(
	SELECT
		[DataHora],
		CONVERT(VARCHAR(5), [DataHora], 108) Hora
	FROM
		[GEOEST].[dbo].[VW_GeoRacOcr]
) TEMP

da forma como você montou, numa única instrução, é necessário repetir a conversão do campo:
SELECT
	[DataHora],
	CASE
		WHEN CONVERT(VARCHAR(5), [DataHora], 108) BETWEEN '00:01' AND '06:00' THEN 'Das 00:01 às 06:00'
		WHEN CONVERT(VARCHAR(5), [DataHora], 108) BETWEEN '06:01' AND '12:00' THEN 'Das 06:01 às 12:00'
		WHEN CONVERT(VARCHAR(5), [DataHora], 108) BETWEEN '12:01' AND '18:00' THEN 'Das 12:01 às 18:00'
		WHEN CONVERT(VARCHAR(5), [DataHora], 108) BETWEEN '18:01' AND '23:59' THEN 'Das 18:01 às 23:59'
	ELSE
		'INCERTO'
	END PERIODO
FROM
	[GEOEST].[dbo].[VW_GeoRacOcr]
GOSTEI 0
Edivaldo Souza

Edivaldo Souza

14/01/2022

o campo virtual Hora só é visível após obter o resultset.
pode ser usado assim:
SELECT
	[DataHora],
	CASE	WHEN Hora BETWEEN '00:01' AND '06:00' THEN 'Das 00:01 às 06:00'
			WHEN Hora BETWEEN '06:01' AND '12:00' THEN 'Das 06:01 às 12:00'
			WHEN Hora BETWEEN '12:01' AND '18:00' THEN 'Das 12:01 às 18:00'
			WHEN Hora BETWEEN '18:01' AND '23:59' THEN 'Das 18:01 às 23:59'
	ELSE
		'INCERTO'
	END PERIODO
FROM
(
	SELECT
		[DataHora],
		CONVERT(VARCHAR(5), [DataHora], 108) Hora
	FROM
		[GEOEST].[dbo].[VW_GeoRacOcr]
) TEMP

da forma como você montou, numa única instrução, é necessário repetir a conversão do campo:
SELECT
	[DataHora],
	CASE
		WHEN CONVERT(VARCHAR(5), [DataHora], 108) BETWEEN '00:01' AND '06:00' THEN 'Das 00:01 às 06:00'
		WHEN CONVERT(VARCHAR(5), [DataHora], 108) BETWEEN '06:01' AND '12:00' THEN 'Das 06:01 às 12:00'
		WHEN CONVERT(VARCHAR(5), [DataHora], 108) BETWEEN '12:01' AND '18:00' THEN 'Das 12:01 às 18:00'
		WHEN CONVERT(VARCHAR(5), [DataHora], 108) BETWEEN '18:01' AND '23:59' THEN 'Das 18:01 às 23:59'
	ELSE
		'INCERTO'
	END PERIODO
FROM
	[GEOEST].[dbo].[VW_GeoRacOcr]
......................


MAIS UMA VEZ..............................MUITO OBRIGADO
GOSTEI 0
POSTAR