public void Build(ISqExtensionBuilder builder) { string?partStr = null; var part = builder.GetValue <DateParts>("part"); switch (part) { case DateParts.Year: partStr = "year"; break; case DateParts.Quarter: partStr = "quarter"; break; case DateParts.Month: partStr = "month"; break; case DateParts.DayOfYear: partStr = "doy"; break; case DateParts.Day: partStr = "day"; break; case DateParts.Week: partStr = "week"; break; case DateParts.WeekDay: builder.AddExpression("part", "dow"); builder.ResultExpression = builder.Inc(builder.ConvertToSqlExpression(Precedence.Primary)); return; case DateParts.Hour: partStr = "hour"; break; case DateParts.Minute: partStr = "minute"; break; case DateParts.Second: partStr = "second"; break; case DateParts.Millisecond: builder.Expression = "Cast(To_Char({date}, 'MS') as int)"; break; default: throw new InvalidOperationException($"Unexpected datepart: {part}"); } if (partStr != null) { builder.AddExpression("part", partStr); } }
public void Build(ISqExtensionBuilder builder) { string?partStr = null; var part = builder.GetValue <DateParts>("part"); switch (part) { case DateParts.Year: partStr = "Y"; break; case DateParts.Quarter: builder.Expression = "Cast(strFTime('%m', {date}) as int)"; builder.ResultExpression = builder.Inc(builder.Div(builder.Dec(builder.ConvertToSqlExpression(Precedence.Primary)), 3)); return; case DateParts.Month: partStr = "m"; break; case DateParts.DayOfYear: partStr = "j"; break; case DateParts.Day: partStr = "d"; break; case DateParts.Week: partStr = "W"; break; case DateParts.WeekDay: builder.Expression = "Cast(strFTime('%w', {date}) as int)"; builder.ResultExpression = builder.Inc(builder.ConvertToSqlExpression(Precedence.Primary)); return; case DateParts.Hour: partStr = "H"; break; case DateParts.Minute: partStr = "M"; break; case DateParts.Second: partStr = "S"; break; case DateParts.Millisecond: builder.Expression = "Cast(strFTime('%f', {date}) * 1000 as int) % 1000"; builder.Extension.Precedence = Precedence.Multiplicative; break; default: throw new InvalidOperationException($"Unexpected datepart: {part}"); } if (partStr != null) { builder.AddExpression("part", partStr); } }
public void Build(ISqExtensionBuilder builder) { string partStr; var part = builder.GetValue <DateParts>("part"); switch (part) { case DateParts.Year: partStr = "year"; break; case DateParts.Quarter: builder.Expression = "Extract(Month from {date})"; builder.ResultExpression = builder.Inc(builder.Div(builder.Dec(builder.ConvertToSqlExpression(Precedence.Primary)), 3)); return; case DateParts.Month: partStr = "month"; break; case DateParts.DayOfYear: partStr = "yearday"; break; case DateParts.Day: partStr = "day"; break; case DateParts.Week: partStr = "week"; break; case DateParts.WeekDay: partStr = "weekday"; break; case DateParts.Hour: partStr = "hour"; break; case DateParts.Minute: partStr = "minute"; break; case DateParts.Second: partStr = "second"; break; case DateParts.Millisecond: partStr = "millisecond"; break; default: throw new InvalidOperationException($"Unexpected datepart: {part}"); } builder.AddExpression("part", partStr); switch (part) { case DateParts.DayOfYear: case DateParts.WeekDay: builder.ResultExpression = builder.Inc(builder.ConvertToSqlExpression(Precedence.Primary)); break; } }
public void Build(ISqExtensionBuilder builder) { var part = builder.GetValue <DateParts>("part"); var partStr = part switch { DateParts.Year => "yyyy", DateParts.Quarter => "q", DateParts.Month => "m", DateParts.DayOfYear => "y", DateParts.Day => "d", DateParts.Week => "ww", DateParts.WeekDay => "w", DateParts.Hour => "h", DateParts.Minute => "n", DateParts.Second => "s", _ => throw new InvalidOperationException($"Unexpected datepart: {part}"), }; builder.AddExpression("part", partStr); }