julianvbrunner 0 Geschrieben 17. Juli 2015 Melden Geschrieben 17. Juli 2015 Ich versuche momentan in SQL einen Weg zu finden Primzahlen zwischen 2 und 100 zu errechnen, meine Query funktioniert aber tut leider nicht das was sie soll. :D Hier ist sie: declare @Ende as integer= 100, @Dz as integer =1, @Hilfe as integer=1 declare @Ergebnis as float = 1 select @dz while (@Dz<=@Ende) Begin set @dz=@dz+1 while (@Hilfe<=@dz/2) Begin set @ergebnis = @dz/@hilfe set @Hilfe=@Hilfe+1 if (@Ergebnis like '%,%') select @dz End End Eventuell findet jemand von euch meinen denkfehler? Ich danke im Vorraus Mfg Julianvbrunner
NilsK 3.046 Geschrieben 17. Juli 2015 Melden Geschrieben 17. Juli 2015 (bearbeitet) Moin, interessanter Ansatz ... Wenn ich nicht ganz falsch liege, müsstest du für den LIKE-Vergleich die Variable in einen String konvertieren. Vielleicht wäre es aber einfacher, den Ergebniswert mit dem Integer des Ergebnisses zu vergleichen. Auch nicht gerade elegant, aber einen Stringvergleich finde ich hier schon sehr krude. Gruß, Nils bearbeitet 17. Juli 2015 von NilsK
julianvbrunner 0 Geschrieben 17. Juli 2015 Autor Melden Geschrieben 17. Juli 2015 (bearbeitet) Ich habe die Query noch etwas ausgebaut und verbessert, komme aber immer noch nicht zum gewünschtem Ergebnis. Ich nehme gerne Verbesserungsvorschläge entgegen und versuche diese umzusetzen. declare @t float=0, @Start float=0, @Teiler float=0, @s float= 0 while(@Start<=100) Begin set @Start= @Start+1 while(@Teiler<@Start) begin set @Teiler=@Teiler+1 set @t=@Start/@Teiler select CAST (@t as varchar(25)) if(@t not like '%.%') \\Ich vermute aufgrund dieser Stelle bekomme ich das Gewünschte Ergebnis nicht begin set @Teiler=2000 end end if(@Teiler>1500) begin select @Start end end bearbeitet 17. Juli 2015 von julianvbrunner
NilsK 3.046 Geschrieben 18. Juli 2015 Melden Geschrieben 18. Juli 2015 (bearbeitet) Moin, dann vermutest du ja dasselbe wie ich. Wie wäre es, wenn du die Stelle änderst? :rolleyes: Mit deinem CAST-Statement gibst du den Wert ja nur per SELECT aus, aber du weist ihn keiner Variablen zu. Gruß, Nils bearbeitet 18. Juli 2015 von NilsK
Beste Lösung julianvbrunner 0 Geschrieben 19. Juli 2015 Autor Beste Lösung Melden Geschrieben 19. Juli 2015 Habe es doch noch hinbekommen, falls jemanden die Lösung interessiert oder sie vielleicht auch mal irgendwann braucht, hier ist sie. declare @Ergebnis int=0, @Start int=2, @Teiler int=2 while(@Start<=100) Begin set @Start= @Start+1 set @Teiler= 2 while(@Teiler<@Start) begin set @Ergebnis=@Start%@Teiler set @Teiler=@Teiler+1 if(@Ergebnis=0) begin set @Teiler=2000 break end end if(@Teiler<1500 ) begin select @Start, ' Ist eine Primzahl' end end
NilsK 3.046 Geschrieben 19. Juli 2015 Melden Geschrieben 19. Juli 2015 Moin, prima, danke für die Lösung. Gruß, Nils
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden