public static string BuildFilterForIntervalIntersection(string startAlias, string endAlias, string startParameter, string endParameter)
{
var filter = @"
(
(
(NOT {0} IS NULL) AND
(NOT {1} IS NULL) AND
(NOT {2} IS NULL) AND
(NOT {3} IS NULL) AND
({0} <= {3}) AND
({2} <= {1})
) OR
(
(
({0} IS NULL) AND
({1} IS NULL)
) OR
(
({2} IS NULL) AND
({3} IS NULL)
) OR
(
({1} IS NULL) AND
({3} IS NULL)
) OR
(
({0} IS NULL) AND
({2} IS NULL)
) OR
(
({1} IS NULL) AND
(NOT {3} IS NULL) AND
({0} <= {3})
) OR
(
({0} IS NULL) AND
(NOT {2} IS NULL) AND
({1} >= {2})
) OR
(
({3} IS NULL) AND
(NOT {2} IS NULL) AND
({2} <= {1})
) OR
(
({2} IS NULL) AND
(NOT {3} IS NULL) AND
({3} >= {0})
)
)
)
";
var mergedFilter = string.Format(filter.TrimInternalSpacesAndLineFeeds(), startAlias, endAlias, startParameter, endParameter);
return mergedFilter;
}