Skip to content

Commit 047a76b

Browse files
committed
Functions to convert betwee Date/Time/DateTime/DateTimeOffset
1 parent 8d7b8c1 commit 047a76b

2 files changed

Lines changed: 77 additions & 11 deletions

File tree

Orm/Xtensive.Orm/Sql/Dml/SqlFunctionType.cs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,21 +60,31 @@ public enum SqlFunctionType
6060

6161
// date time / interval functions
6262
// not ansi sql but our cross-server solution
63-
64-
DateTimeConstruct,
65-
DateTimeAddYears,
66-
DateTimeAddMonths,
6763
#if NET6_0_OR_GREATER //DO_DATEONLY
64+
DateConstruct,
6865
DateAddYears,
6966
DateAddMonths,
7067
DateAddDays,
7168
DateToString,
69+
DateToDateTime,
70+
DateToDateTimeOffset,
71+
TimeConstruct,
7272
TimeAddHours,
7373
TimeAddMinutes,
7474
TimeToString,
75+
TimeToDateTime,
76+
TimeToDateTimeOffset,
7577
#endif
78+
79+
DateTimeConstruct,
80+
DateTimeAddYears,
81+
DateTimeAddMonths,
7682
DateTimeTruncate,
7783
DateTimeToStringIso,
84+
#if NET6_0_OR_GREATER //DO_DATEONLY
85+
DateTimeToTime,
86+
DateTimeToDate,
87+
#endif
7888
IntervalConstruct,
7989
IntervalToMilliseconds,
8090
IntervalToNanoseconds,
@@ -89,10 +99,10 @@ public enum SqlFunctionType
8999
DateTimeOffsetToLocalTime,
90100
DateTimeOffsetToUtcTime,
91101
DateTimeToDateTimeOffset,
92-
102+
DateTimeOffsetToDateTime,
93103
#if NET6_0_OR_GREATER //DO_DATEONLY
94-
DateConstruct,
95-
TimeConstruct,
104+
DateTimeOffsetToTime,
105+
DateTimeOffsetToDate,
96106
#endif
97107

98108
// .NET like rounding functions

Orm/Xtensive.Orm/Sql/SqlDml.cs

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,12 @@ public static SqlFunctionCall DateTimeAddMonths(SqlExpression source, SqlExpress
693693
}
694694

695695
#if NET6_0_OR_GREATER //DO_DATEONLY
696+
public static SqlFunctionCall DateTimeToTime(SqlExpression expression)
697+
{
698+
ArgumentValidator.EnsureArgumentNotNull(expression, "expression");
699+
return new SqlFunctionCall(SqlFunctionType.DateTimeToTime, expression);
700+
}
701+
696702
public static SqlFunctionCall DateAddYears(SqlExpression source, SqlExpression years)
697703
{
698704
ArgumentValidator.EnsureArgumentNotNull(source, "source");
@@ -714,6 +720,30 @@ public static SqlFunctionCall DateAddDays(SqlExpression source, SqlExpression da
714720
return new SqlFunctionCall(SqlFunctionType.DateAddDays, source, days);
715721
}
716722

723+
public static SqlFunctionCall DateToString(SqlExpression expression)
724+
{
725+
ArgumentValidator.EnsureArgumentNotNull(expression, "expression");
726+
return new SqlFunctionCall(SqlFunctionType.DateToString, expression);
727+
}
728+
729+
public static SqlFunctionCall DateToDateTime(SqlExpression expression)
730+
{
731+
ArgumentValidator.EnsureArgumentNotNull(expression, "expression");
732+
return new SqlFunctionCall(SqlFunctionType.DateToDateTime, expression);
733+
}
734+
735+
public static SqlFunctionCall DateTimeToDate(SqlExpression expression)
736+
{
737+
ArgumentValidator.EnsureArgumentNotNull(expression, "expression");
738+
return new SqlFunctionCall(SqlFunctionType.DateTimeToDate, expression);
739+
}
740+
741+
public static SqlFunctionCall DateToDateTimeOffset(SqlExpression expression)
742+
{
743+
ArgumentValidator.EnsureArgumentNotNull(expression, "expression");
744+
return new SqlFunctionCall(SqlFunctionType.DateToDateTimeOffset, expression);
745+
}
746+
717747
public static SqlFunctionCall TimeAddHours(SqlExpression source, SqlExpression hours)
718748
{
719749
ArgumentValidator.EnsureArgumentNotNull(source, "source");
@@ -728,16 +758,22 @@ public static SqlFunctionCall TimeAddMinutes(SqlExpression source, SqlExpression
728758
return new SqlFunctionCall(SqlFunctionType.TimeAddMinutes, source, minutes);
729759
}
730760

731-
public static SqlFunctionCall DateToString(SqlExpression expression)
761+
public static SqlFunctionCall TimeToString(SqlExpression expression)
732762
{
733763
ArgumentValidator.EnsureArgumentNotNull(expression, "expression");
734-
return new SqlFunctionCall(SqlFunctionType.DateToString, expression);
764+
return new SqlFunctionCall(SqlFunctionType.TimeToString, expression);
735765
}
736766

737-
public static SqlFunctionCall TimeToString(SqlExpression expression)
767+
public static SqlFunctionCall TimeToDateTime(SqlExpression expression)
738768
{
739769
ArgumentValidator.EnsureArgumentNotNull(expression, "expression");
740-
return new SqlFunctionCall(SqlFunctionType.TimeToString, expression);
770+
return new SqlFunctionCall(SqlFunctionType.TimeToDateTime, expression);
771+
}
772+
773+
public static SqlFunctionCall TimeToDateTimeOffset(SqlExpression expression)
774+
{
775+
ArgumentValidator.EnsureArgumentNotNull(expression, "expression");
776+
return new SqlFunctionCall(SqlFunctionType.TimeToDateTimeOffset, expression);
741777
}
742778
#endif
743779

@@ -868,6 +904,26 @@ public static SqlFunctionCall DateTimeToDateTimeOffset(SqlExpression dateTime)
868904
return new SqlFunctionCall(SqlFunctionType.DateTimeToDateTimeOffset, dateTime);
869905
}
870906

907+
public static SqlFunctionCall DateTimeOffsetToDateTime(SqlExpression dateTimeOffset)
908+
{
909+
ArgumentValidator.EnsureArgumentNotNull(dateTimeOffset, nameof(dateTimeOffset));
910+
return new SqlFunctionCall(SqlFunctionType.DateTimeOffsetToDateTime, dateTimeOffset);
911+
}
912+
913+
#if NET6_0_OR_GREATER //DO_DATEONLY
914+
public static SqlFunctionCall DateTimeOffsetToTime(SqlExpression dateTimeOffset)
915+
{
916+
ArgumentValidator.EnsureArgumentNotNull(dateTimeOffset, nameof(dateTimeOffset));
917+
return new SqlFunctionCall(SqlFunctionType.DateTimeOffsetToTime, dateTimeOffset);
918+
}
919+
920+
public static SqlFunctionCall DateTimeOffsetToDate(SqlExpression dateTimeOffset)
921+
{
922+
ArgumentValidator.EnsureArgumentNotNull(dateTimeOffset, nameof(dateTimeOffset));
923+
return new SqlFunctionCall(SqlFunctionType.DateTimeOffsetToDate, dateTimeOffset);
924+
}
925+
#endif
926+
871927
#endregion
872928

873929
#region FunctionCall

0 commit comments

Comments
 (0)