SQL Ajuda com consulta para contabilizar dias de um período

Boa noite,
Tenho o seguinte problema e gostaria de uma luz:
Tenho um historico de movimentação onde uma movimentação inicia por exemplo em 25/02/2017 e finalizar em 15/03/2017. Tenho que gerar um relatório mensal dos dia que a movimentação ocupou no mês onde o usuário informa o período por exemplo: 01/03/2017 ate 31/03/2017.
Assim eu deveria conseguir pegar todos que ocuparam o período, no caso do exemplo acima eu teria que contar apenas os dias do mês 03 desde o dia 01 ate a data final dele (15). Como eu poderia fazer isso?
Tenho outras situações como por exemplo se a movimentação iniciou em 25/02/2017 e finalizou em 03/04/2017, gerei o relatorio de 01/03/2017 a 31/03/2017 assim eu deveria pegar apenas os dias que ocupou no mes 03.
Outra situação seriam as movimentações que não tiveram data final atribuída, iniciou em 25/02/2017, gerei para 01/03/2017 a 31/03/2017 e a movimentação ainda esta aberta.
Alguma ideia para lidar com essas situações? Tentei fazer pelo periodo de inicio ou pelo final, mas não sei como poderia fazer o filtro entender e contabilizar para os que não tem tem uma data de fim de movimentação ou que ocuparam apenas alguns dias dentro do mês de geração.
Alguem teria uma ideia para me ajudar?
Agradeço a todos desde já.

Você está usando alguma function ou procedure no banco?

Aliás, qual banco você está usando?

Se estiver montando esse SQL numa proc ou func, pode testar o segundo parâmetro, caso ele seja nulo ou string em branco, você busca a maior data, exemplo no mysql…

IF @dataFinal IS NULL or @dataFinal = '' THEN
    SELECT MAX(data) INTO @dataFinal FROM tabela
END IF;

SELECT * FROM tabela WHERE data BETWEEN @dataInicial AND @dataFinal

Caso seu primeiro parâmetro passe a ser opcional, você pode fazer outro IF para ele usando a mesma lógica, só trocando o MAX por MIN…