Преобразование даты между двумя датами и временем в первый день месяца - PullRequest
0 голосов
/ 14 сентября 2018

Я хотел бы преобразовать дату, которая попадает между двумя датами и временем, в первый день производственного месяца.Месяц производства находится между, например, 01/07/2018 07:00:00 и 01/08/2018 07:00:00.Время важно.

Таким образом, дата, попадающая между этими 2 датами времени (>= 01/07/2018 07:00:00 and < 01/08/2018 07:00:00), должна быть преобразована в 01/07/2018.То же самое должно произойти для всех остальных месяцев.

Несколько примеров желаемого результата:

Original_DateTime   | Converted_DateTime
15/07/2018 15:42:00 | 01/07/2018
01/08/2018 05:42:00 | 01/07/2018
01/07/2018 03:30:00 | 01/06/2018
01/07/2018 07:36:00 | 01/07/2018
03/08/2018 05:30:00 | 01/08/2018

Ответы [ 4 ]

0 голосов
/ 14 сентября 2018

Как это работает для вас?Вы можете удалить приведение к дате, чтобы включить время:

    CREATE TABLE dates
(
  dt DATETIME
  );

INSERT INTO dates VALUES ('2018-07-01 06:59:59.000'),
('2018-07-01 07:59:59.000'),
('2018-07-30 07:59:59.000'),
('2018-07-02 06:59:59.000');

SELECT 
IIF(
  DATEPART(DAY, dt) = 1 AND 
  CAST(dt AS TIME) < '07:00:00.000', CAST(DATEADD(MONTH, -1, dt) AS DATE),
  DATEADD(DAY, -(DATEPART(DAY, dt)) + 1,CAST(dt AS DATE))) [CalculatedDate]
FROM dates
0 голосов
/ 14 сентября 2018

Рассчитайте первый день месяца, затем рассмотрите количество секунд после этой точки, если оно меньше 7 часов, вычтите 1 месяц.

select
     original, ca2.converted
from mytable
cross apply (
    select dateadd(day,-(datepart(day,original)-1) ,cast(original as date))  first_day
    ) ca1
cross apply (
    select case when datediff(second,first_day,original) < (7*60*60) then dateadd(month,-1, first_day) else first_day end converted
    ) ca2
0 голосов
/ 14 сентября 2018

Существует также очень простое решение:

select format(dateadd(hour,-7,OrginalDateTime),'yyyy-MM-01') from OrginalTable;

Попробуйте демо

0 голосов
/ 14 сентября 2018

Вы можете использовать запрос, как показано ниже

select 
  OriginalDate,
  ConvertedDate= dateadd(hh,7,dateadd(m,datediff(m,0,dateadd(hh,-7,OriginalDate)),0))
from yourTable

См. Рабочую демонстрацию

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