Преобразовать этот формат времени в секунды - PullRequest
0 голосов
/ 03 марта 2020

У меня есть столбец с данными, которые выглядят так:

'1970-01-01 01:15:00.0000000' 
(01(days):15(hours):00(minutes):0000000(seconds))

Дата не имеет значения, но я хочу преобразовать компонент времени в секунды. Я хочу, чтобы вывод для этой строки был 140400.

Ответы [ 4 ]

3 голосов
/ 03 марта 2020

Если вы действительно используете тип данных datetime2 и используете часы для хранения дней, минуты для хранения часов, секунды для хранения минут и центсекунды для хранения секунд ... Вы можете сделать это ...

DECLARE @YourDatetime datetime2(7) = '1970-01-01 01:15:00.0100000';

SELECT (DATEPART(HOUR,@YourDatetime) * 86400) +
       (DATEPART(MINUTE,@YourDatetime) * 3600) +
       (DATEPART(SECOND,@YourDatetime) * 60) +
       (DATEPART(MILLISECOND, @YourDatetime) / 10)

Но я настоятельно предлагаю вам прекратить злоупотреблять типом данных datetime2. Часы должны быть часами, а не днями. Надеюсь, именно поэтому вы пытаетесь делать то, что просите.

Это, однако, предполагает, что у вас нет значений с 24 или более часами, так как значение типа '1970-01-01 24:40:00.0100000' не может быть хранится в любом типе данных Дата и Время.

1 голос
/ 03 марта 2020

Похоже, час это дни, минуты это часы и т. Д. c

Declare @d DATETIME2='1970-01-01 01:15:00.0000000'

Select (datepart(hour,@d)*3600*24)
      +(datepart(minute,@d)*3600)
      +(datepart(second,@d)*60)

Возвращает

140400
0 голосов
/ 03 марта 2020

Вы можете использовать datediff(), чтобы вычислить количество секунд с вашей контрольной даты:

datediff(s, '1970-01-01', @mydatetime)

Я подозреваю, что вы действительно хотите начать с 1 января 1970 года, потому что это отправная точка эпохи. Если вы действительно хотите за день до этого, то:

datediff(s, '1969-12-31', @mydatetime)
0 голосов
/ 03 марта 2020

Разумное толкование вопроса возвращает 90 900:

select datediff(second, '1969-12-31', '1970-01-01 01:15:00.0000000')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...