TransWikia.com

Duda en query sobre SQL Server

Stack Overflow en español Asked by rgf95 on February 6, 2021

Estoy intentando introducir en una tabla_A las fechas distintas de la tabla_B. Estoy usando la siguiente consulta.

MERGE tabla_A AS A
USING ( SELECT   distinct CONVERT(DATE,DateTime) DateTime
FROM    table_B
WHERE  DateTime between DATEADD(mm, -18, GETDATE())  and getdate() 
)AS SOURCE
ON A.[Date]=SOURce.[Datetime]

WHEN NOT MATCHED BY TARGET THEN
INSERT(
       [Date]
) 
VALUES(
         
       SOURCE.[DateTime]  
)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;

El problema esta que el formato de la columna de DateTime de la tabla_B esta en fecha y hora y en la tabla_A esta solo en fecha ya que es lo que queremos queremos solo las distintas fechas entre los 18 meses anteriores a la fecha actual de la tabla_A. Creo que mi error esta en esta parte del codigo:

WHEN NOT MATCHED BY TARGET THEN
INSERT(
       [Date]
) 
VALUES(
         
       SOURCE.[DateTime]  
) 

Que no deberia poner SOURCE.[DateTime], ya que esto me esta introduciendo todas las fechas en ese periodo de tiempo y no las distintas. Alguna sugerencia?

Estos serian los valores de la tabla inicial

Y esto es lo que quiero conseguir en la nueva tabla

Siendo la imagen de arriba los valores de la tabla inicial y la imagen de abajo los valores que quiero en la tabla final.

One Answer

Claramente el error está en la línea

USING ( SELECT distinct CONVERT(DATE,DateTime) DateTime

El distinct no puede ser de un DateTime, si lo que quieres son fechas únicas. Debes adaptar el Convert para que solo tome la fecha y no la fecha y hora, por ejemplo pasándolo a Date con un Cast.

USING ( SELECT distinct CAST(DateTime as Date) DateTime

O bien a un varchar mediante un convert

USING ( SELECT distinct convert(varchar, DateTime, 112) DateTime

Answered by Roger Torné on February 6, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP