Как преобразовать int в datetime с часами и минутами с SQL Server - PullRequest
0 голосов
/ 12 марта 2019

Я использую две базы данных, и у меня проблема.

Один использует дату с datetime типом данных, а другой использует int (например, 201901010000).

Я хочу сравнить их, и это должно быть быстро, я уже пробовал:

  • convert(date, 21) или другие числа (мой datetime - YYYY-MM-DD HH:MM:SSSS), но он не работает с минутами и часами.
  • Я попытался удалить все '-' и ':' из даты и времени, а затем преобразовать в int

Так что мой вопрос прост, как его сравнить?

Спасибо =)

1 Ответ

0 голосов
/ 12 марта 2019

Вы можете использовать одно из приведенных ниже выражений, чтобы сделать JOIN (не говоря, что это довольно красиво).Однако, согласно комментариям, которые я сделал по этому вопросу, ни один из них не будет работать хорошо.

SELECT *
FROM (VALUES(CONVERT(numeric,'201901010000'))) N(Dt)
     JOIN (VALUES(CONVERT(datetime,'2019-01-01T00:00:00'))) D(dt) ON CONVERT(datetime,STUFF(STUFF(STUFF(STUFF(CONVERT(varchar(12),N.dt),11,0,':'),9,0,'T'),7,0,'-'),5,0,'-') + ':00.000') = D.Dt;

SELECT *
FROM (VALUES(CONVERT(numeric,'201901010000'))) N(Dt)
     JOIN (VALUES(CONVERT(datetime,'2019-01-01T00:00:00'))) D(dt) ON  N.Dt = CONVERT(numeric,LEFT(REPLACE(REPLACE(REPLACE(CONVERT(varchar(20),CONVERT(datetime,D.Dt),126),'-',''),'T',''),':',''),12));

Если вы не можете изменить тип данных одного из столбцов (т.е. через вычисляемый столбец), есть .littleВы можете сделать с производительностью, как запрос в non-SARGable.

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