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?
Siendo la imagen de arriba los valores de la tabla inicial y la imagen de abajo los valores que quiero en la tabla final.
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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP