SQL Server - Как преобразовать тип даты и времени из типа Nvarchar? - PullRequest
0 голосов
/ 16 января 2019

У меня есть две колонки nvarchar.

Пример данных:

column1='20180402', column2='134259'

Моя цель - создать столбец типа datetime, объединив эти два столбца.

Как это: '2018-04-02 13:42:59.000'

Как я могу это сделать?

Пожалуйста, помогите мне?

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Вы можете использовать DATETIMEFROMPARTS:

SELECT DATETIMEFROMPARTS(
    SUBSTRING(column1, 1, 4),
    SUBSTRING(column1, 5, 2),
    SUBSTRING(column1, 7, 2),
    SUBSTRING(column2, 1, 2),
    SUBSTRING(column2, 3, 2),
    SUBSTRING(column2, 5, 2),
    0
)
FROM (VALUES
    ('20180402', '134259')
) v(column1, column2)
0 голосов
/ 16 января 2019
declare @d varchar(50)='20180402',
        @t varchar(50)='134259'


select convert(varchar(50),convert(date,@d)) + ' '+ convert(varchar(50),dateadd(hour, (@T / 10000) % 100,
       dateadd(minute, (@T / 100) % 100,
       dateadd(second, (@T / 1) % 100,
       cast('00:00:00' as time(3))))) )
0 голосов
/ 16 января 2019

Вы можете преобразовать обе строки в значение datetime и сложить их вместе, чтобы получить объединенную дату / время, или объединить строки и преобразовать результат.

Обратите внимание, что для правильного разбора времени потребуется добавить два : символа:

select cast(d as datetime) + cast(stuff(stuff(t,5,0,':'),3,0,':') as datetime) as dt1
      ,cast(d + ' ' + stuff(stuff(t,5,0,':'),3,0,':') as datetime) as dt2
from (values('20180402','134259')) as v(d,t);

выход

+-------------------------+-------------------------+
|           dt1           |           dt2           |
+-------------------------+-------------------------+
| 2018-04-02 13:42:59.000 | 2018-04-02 13:42:59.000 |
+-------------------------+-------------------------+
...