Похоже, что эти числа представляют собой метки времени Unix с точностью до миллисекунды.
SELECT DATEADD( SECOND
, CONVERT(BIGINT, '1120501800000') / 1000
, '1970/01/01')
Преобразуется в 2005/07/04 (yyyy/mm/dd
) при 18: 30.
ВВ вашем примере вы получите 2005/07/05, что может быть связано со смещением часового пояса UTC по вашему местному времени.Допустим, вы на 6 часов впереди;что переводится как:
SELECT DATEADD( HOUR
, 6
, DATEADD( SECOND
, CONVERT(BIGINT, '1120501800000') / 1000
, '1970/01/01')
)
Это преобразуется в 2005/07/05, как и следовало ожидать.
Чтобы получить форматирование mm/dd/yy
, на которое вы претендуете:
SELECT CONVERT(VARCHAR(2), DATEPART(MONTH, date)) + '/'
+ CONVERT(VARCHAR(2), DATEPART(DAY, date)) + '/'
+ RIGHT(CONVERT(VARCHAR(4), DATEPART(YEAR, date)), 2)
FROM ( SELECT DATEADD(HOUR, 6, DATEADD(SECOND, CONVERT(BIGINT, '1120501800000') / 1000, '1970/01/01'))
) AS T (date)