Рассчитать время по столбцам SQL - PullRequest
0 голосов
/ 03 августа 2020

Привет, сообщество Stackoverflow,

Я хотел бы добиться следующего:

Из столбца DT (источник) я хотел бы создать новую строку даты и времени (вывод) для каждого ST1 / Столбец T1 (источник)

Source:
DT                       ST1 T1     ST2    T2     ST3    T3     ST4     T4
2020-08-03 12:40:00.000  0   8000   6500   1500   8001   220    8221    7000

Это результат, которого я хотел бы достичь.

   **Ssd:**                  **SED**               **S**
1: 2020-08-03 12:40:00.000  2020-08-03 12:40:08.000  1
2: 2020-08-03 12:40:06.500  2020-08-03 12:40:08.000  2
3: 2020-08-03 12:40:08.001  2020-08-03 12:40:08.221  3
4: 2020-08-03 12:40:08.221  2020-08-03 12:40:15.221  4

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Будьте осторожны, используйте datetime2, если вам действительно нужна точность до одной миллисекунды.

select format(SSD, 'hh:mm:ss.fff'), format(SED, 'hh:mm:ss.fff'), S
from T cross apply (
    values
    ( dateadd(millisecond, ST1, DT), dateadd(millisecond,       T1, DT), 1 ),
    ( dateadd(millisecond, ST2, DT), dateadd(millisecond, ST2 + T2, DT), 2 ),
    ( dateadd(millisecond, ST3, DT), dateadd(millisecond, ST3 + T3, DT), 3 ),
    ( dateadd(millisecond, ST4, DT), dateadd(millisecond, ST4 + T4, DT), 4 )
) as pvt(SSD, SED, S);

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

https://rextester.com/XDD81255

0 голосов
/ 03 августа 2020

Операции с данными / временем, как известно, зависят от базы данных. Один из методов:

select dt + st1 * interval '1 millisecond', dt + t1* interval '1 millisecond'
from t
union all
select dt + st2 * interval '1 millisecond', dt + t2 * interval '1 millisecond'
from t
union all
select dt + st3 * interval '1 millisecond', dt + t3 * interval '1 millisecond'
from t
union all
select dt + st4 * interval '1 millisecond', dt + t4 * interval '1 millisecond'
from t;

Обратите внимание, что при этом таблица сканируется четыре раза. Существуют более эффективные методы, но лучший из них зависит от базы данных.

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