Est-ce que des gourous C#/T-SQL peuvent m'aider? J'ai du mal à convertir ce code C# en T-SQL.C# to T-SQL - Trouver le plus proche de la semaine
Voici le code C#:
public (int distance, int absoluteDistance) MinimumDayOfWeekDistance(DayOfWeek dayOfWeekOne,
DayOfWeek dayOfWeekTwo)
{
int forwardDaysDifference(int iteratorDayOfWeekOne, int iteratorDayOfWeekTwo) => iteratorDayOfWeekTwo -
iteratorDayOfWeekOne +
((iteratorDayOfWeekOne >
iteratorDayOfWeekTwo)
? 7
: 0);
int forwardOneTwo = forwardDaysDifference((int) dayOfWeekOne, (int) dayOfWeekTwo);
int forwardTwoOne = forwardDaysDifference((int) dayOfWeekTwo, (int) dayOfWeekOne);
if (forwardOneTwo < forwardTwoOne)
{
return (forwardOneTwo, forwardOneTwo);
}
return (-forwardTwoOne, forwardTwoOne);
}
public int DaysToClosestDayOfWeek(DayOfWeek dayOfWeekOne, List<DayOfWeek> dayOfWeekList)
{
return dayOfWeekList.Select(dayOfWeek => MinimumDayOfWeekDistance(dayOfWeekOne, dayOfWeek))
.Aggregate((x, y) => (x.absoluteDistance < y.absoluteDistance)
? x
: ((x.absoluteDistance == y.absoluteDistance) ? ((x.distance > 0) ? x : y) : y)).distance;
}
Et voici la mise en œuvre:
int dayOfWeekDistance = this.DaysToClosestDayOfWeek(passedInDateParameter.DayOfWeek, myDayOfWeekList);
passedInDateParameter = passedInDateParameter.AddDays(dayOfWeekDistance);
L'idée est que vous avez une liste (un DayOfWeekList du côté C#), et que la liste peut être rempli avec n'importe quel jour de la semaine. Peut être lundi et mardi, peut être mardi, mercredi, vendredi et samedi, etc.
Un paramètre DateTime transmis est comparé à cette liste et est mis à jour en fonction du jour de la semaine où il est le plus proche. la liste. Par exemple, si le paramètre DateTime transmis est un dimanche et que ma liste DayOfWeek contient un mercredi et un samedi, le paramètre doit être ramené au samedi car il est le plus proche dans la liste. De même, si ma liste contient les dimanches, lundis et samedis, et que le paramètre passé est jeudi, alors le paramètre devra être déplacé vers samedi. Enfin, si le paramètre est équidistant de deux jours de semaine dans la liste (mercredi est passé et lundi et vendredi sont dans la liste ... ou dimanche est passé et mardi et vendredi sont dans la liste), puis le paramètre doit être avancé au prochain jour de la semaine le plus proche (qui, dans le premier cas, serait vendredi, et mardi dans le second cas). Jusqu'à présent, du côté SQL, j'ai une variable VARCHAR représentant une liste de nombres basée sur chaque jour de la semaine. Par exemple, la variable serait quelque chose comme "126" si dimanche, lundi et vendredi étaient censés être contenus dans la variable.
En outre, du côté SQL, il serait optimal de renvoyer la distance minimale du paramètre d'entrée du jour de la semaine le plus proche dans la liste. Par exemple, si je passe un jeudi (ou un 5 pour la façon dont il est actuellement implémenté), et dimanche, lundi et mardi, sont dans la liste (ou 1,2 et 3), un -2. devrait être retourné (puisque mardi est le plus proche de jeudi dans la liste), de cette façon je peux soustraire 2 jours de ma variable datetime cible (la variable datetime sort du cadre de cette question, juste ici à titre de référence). En d'autres termes, les distances du paramètre d'entrée par rapport au jour de la semaine le plus proche doivent être renvoyées, et elles peuvent être positives ou négatives afin de représenter efficacement le nombre de jours à ajouter ou à soustraire. Jusqu'à présent, l'implémentation fonctionne très bien en C#, j'ai juste du mal à le convertir en SQL parce que ce n'est pas ma meilleure langue.
Toute aide à ce sujet serait grandement appréciée.
Comment est dimanche plus proche de jeudi que le samedi est? –
@DanBracuk Je suis confus quant à ce que vous voulez dire. Parlez-vous du deuxième exemple que j'ai donné en parlant de la liste DayOfWeek? – wibby35