Exemple #1
0
            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);
                }
            }
Exemple #2
0
            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);
                }
            }
Exemple #3
0
            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;
                }
            }
Exemple #4
0
            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);
            }