как связать два поля с одинаковой датой, но разным временем - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу получить данные транзакции с разницей в датах для «ДАТА» (Дата транзакции) и ENCODED Дата (фактическая дата),

Я пытался связать два поля с датами транзакции, но проблема заключается вВ другом поле есть метка времени, что означает, что я не могу относиться к другим полям без метки времени

select
    cast( cdvdate AS varchar(12) ) as Transaction_Date,
    cast( UpdateDate AS varchar(20) ) as Encoded_Date,
    ApprovedDate
from
    cdvhdr
where
    cdvdate != updatedate 

Я ожидаю, что результат будет без той же даты транзакции и закодированной даты, как эта

Transaction_Date    Encoded_Date            ApprovedDate
Jan  4 2016         Jan 23 2016 10:54AM     2016-01-24 16:16:37.000

, ноон показывает результат с тем же днем ​​из-за отметки времени

Transaction_Date    Encoded_Date            ApprovedDate
Jan 26 2016         Jan 26 2016 10:58AM     2016-01-26 13:42:32.000
Jan 26 2016         Jan 26 2016 11:07AM     2016-01-26 13:42:55.000
Jan 26 2016         Jan 26 2016 11:09AM     2016-01-26 13:41:49.000
Jan 26 2016         Jan 26 2016 11:11AM     2016-01-26 13:42:09.000

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Используйте DATEDIFF(DAY,cdvdate,updatedate)<>0 там, где условие. Будет сравниваться только даты.

0 голосов
/ 05 ноября 2019

Просто преобразуйте значения в даты для сравнения:

where convert(date, cdvdate) <> convert(date, updatedate)

Если один из них уже date, преобразование явно не требуется.

SQL Serverхорошо об использовании индексов с преобразованием в date. Хотя в этом случае нельзя использовать индекс (поскольку сравниваются два столбца), рекомендуется избегать datediff() в предложении where, если только он вам действительно не нужен. В этом случае вам это не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...