Как вычесть день в столбце дата-время - SQL Server 2008 - PullRequest
0 голосов
/ 03 октября 2018

У меня есть два столбца в формате YYYY MM DD MM SS, и я хочу вычесть дни между этими двумя столбцами (DD)

201810031030 YYYY MM DD MM SS - 201810051030 YYYY MM DD MM SS  = 3(03-05)

У меня есть функция SQL, которая преобразует MM Month в строку (т.е. январь).

Любое предложение высоко ценится

Ниже приведен SQL и полученная ошибка:

DATEDIFF(DAY, CAST(IST COLUMN) AS DATETIME), CAST (2ND COLUMN) AS DATETIME))

Преобразование не выполнено при преобразовании даты и / или времени из символаstring

В настоящее время тип данных VARCHAR (201810031030), и я хотел бы разыграть его на лету

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

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

Если это невозможно, вы можете использовать stuff для создания стандартного формата datetime и выполнить от cast до datetime.Затем вы можете использовать datediff для расчета разницы в днях:

declare @tmp table (date_1 varchar(50), date_2 varchar(50))

insert into @tmp values ('201810031030','201810051030')

select 
     cast(stuff(stuff(date_1, 11,0,':') + ':00', 9,0,' ') as datetime) as date_1
    ,cast(stuff(stuff(date_2, 11,0,':') + ':00', 9,0,' ') as datetime) as date_2

    ,DATEDIFF(
        day,
        cast(stuff(stuff(date_1, 11,0,':') + ':00', 9,0,' ') as datetime),
        cast(stuff(stuff(date_2, 11,0,':') + ':00', 9,0,' ') as datetime)
    ) + 1 as diff
from @tmp

Результат:

enter image description here

0 голосов
/ 03 октября 2018

Вам нужно сделать что-то вроде этого, чтобы сделать его стандартным и простым.Это в основном плохая практика с точки зрения базы данных, но вполне возможно, что существует законная потребность в данных в этом формате, поэтому я не из тех, кто может судить.Это должно дать вам то, что вы ищете с каждым исполнением:

DECLARE @oddDTFormat1 AS CHAR(12);
DECLARE @oddDTFormat2 AS CHAR(12);
DECLARE @newDTFormat1 AS DATETIME;
DECLARE @newDTFormat2 AS DATETIME;

SET @oddDTFormat1 = '201809010030';
SET @oddDTFormat2 = '201809031037';


SET @newDTFormat1 = CONVERT(DATETIME, LEFT(@oddDTFormat1, 8), 112) + CONVERT(DATETIME, CONCAT(SUBSTRING(@oddDTFormat1, 9, 2), ':', SUBSTRING(@oddDTFormat1, 11, 2)), 114);

SET @newDTFormat2 = CONVERT(DATETIME, LEFT(@oddDTFormat2, 8), 112) + CONVERT(DATETIME, CONCAT(SUBSTRING(@oddDTFormat2, 9, 2), ':', SUBSTRING(@oddDTFormat2, 11, 2)), 114);

SELECT DATEDIFF(DAY, @newDTFormat1, @newDTFormat2);

Спасибо, Дейв Бетурне PV9685

0 голосов
/ 03 октября 2018

Вы можете использовать функцию DateDiff:

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