Это просто конвертировать в запросе SQL. Единственная сложная часть (как всегда) связана с часовыми поясами.
Если тип данных SQL Server равен datetimeoffset
, то вам нужно перевести его во время UT C, а затем преобразовать в datetime2
, например:
cast( [Date] at time zone 'UTC' as datetime2 )
Если тип данных SQL Server имеет значение datetime
или datetime2
и уже представляет время UT C, тогда вам не нужно это преобразование. И если они datetime
или datetime2
хранятся в каком-то местном часовом поясе, вам необходимо преобразовать их в datetimeoffset
с соответствующим часовым поясом, а затем преобразовать в UT C, как указано выше. EG
cast( [Date] at time zone 'Central Standard Time' at time zone 'UTC' as datetime2 )
Таким образом, предполагая, что столбец SQL равен datetimeoffset
, и вы конвертируете в Unix Epoch Time, запрос будет выглядеть так:
var sql = @"
select top (1000)
datediff(second, '19700101', cast( [Date] at time zone 'UTC' as datetime2 ) ) Date,
[open],
high,
low,
[close]
from dbo.[foo"]
where date > @backDate
and date <= @Date
order by date
FOR JSON AUTO";
SqlCommand comm = new SqlCommand(sql, conn);