Я пытаюсь сделать операцию копирования для копирования данных из локальной базы данных SQL с фабрикой данных. Мне нужно динамически изменять запрос, поэтому он принимает диапазон дат, например диапазоны каждую минуту: Так, например: первая копия будет использовать динамический контент как ... И DateTime > '20230131 13:06' И DateTime < '20230131 13:07'
а затем следующий запуск будет: И DateTime > '20230131 13:07' И DateTime < '20230131 13:08'
Я пытался использовать такие переменные, как: И DateTime > @{переменные('время начала')} И DateTime < @{переменные('endtime')}
Это работает, когда я вручную задаю время переменным, но фактические данные за год, поэтому мне нужно прочитать время начала и окончания из файла или как-то автоматизировать это. Я пытался использовать блок «ForEach», но проблема в том, что я могу установить только одну переменную в качестве цикла, либо время начала, либо время окончания. какое лучшее решение для этого? Как я могу использовать блок «ForEach» во время начала и ввести время окончания таким образом, чтобы оно было через одну минуту после времени начала?


Вы можете прочитать файл времени начала, прокрутить его и добавить минуту к каждому времени в цикле for.

addMinutes().@concat(substring(item().start_time,0,4),'-',substring(item().start_time,4,2),'-',substring(item().start_time,6,2),' ',substring(item().start_time,9,5))

-, объединенное выше.@replace(addminutes(variables('tp'),1,'yyyy-MM-dd hh:mm'),'-','')

Вы можете попробовать открыть новый вопрос для этой новой проблемы, поскольку проблема с этой проблемой решена.
Я здесь новенький, поэтому через 2 дня мне нельзя задавать новый вопрос :)
Никогда не знал, что это вещь. Вы можете просто заключить его в одинарные кавычки вот так select * from my_table where start_time>'@{pipeline().parameters.start_time}' and end_time<'@{pipeline().parameters.end_time}'.
Я не уверен, как это работает в фабрике данных, но в t-sql вы можете увеличить свои переменные на одну минуту с помощью функции DATEADD. Скрипка
DATEADD(*interval*, *number of intervals*, *start datetime*)
Я проверил книги в Интернете, и похоже, что фабрика данных использует datetime_add. Хотя, похоже, работает так же.
DATETIME_ADD(*interval*, *number of intervals*, *start datetime*)
Надеюсь, это поможет.
DECLARE @startdate datetime = '20230131 13:06'
, @enddate datetime
, @finishdate datetime;
SET @enddate = DATEADD(minute, 1, @startdate);
SET @finishdate = DATEADD(minute, 100, @startdate); --will loop 100 times.
--change that to whatever you want.
WHILE @startdate < @finishdate
BEGIN
SELECT data
INTO newTable
FROM oldTable
WHERE oldTableDate >= @startdate
AND oldTableDate <= @enddate;
SELECT @startdate = DATEADD(minute, 1, @startdate),
@enddate = DATEADD(minute, 1, @enddate)
END
Это блестяще. Когда я использую AND DateTime > @{variables('ts')}, код sql похож на AND DateTime > 20230131 13:07, что выдает ошибку, поскольку мне нужна дата, окруженная знаком ', например: AND DateTime > '20230131 13:07' много раз пробовал с @concat по разным сценариям использования ''' и '''', но это не сработало. Можете ли вы помочь мне в этом хорошо? :)