22 Stimmen

Wie kann ich feststellen, ob eine Ziffer eine gerade Zahl ist?

Ein wenig eingerostet im alten SQL.

Kannst du mir helfen?

Angenommen, ich habe eine Zahl z. B. 1 oder 2 oder 4, muss ich herausfinden, ob es sich um eine gerade oder ungerade Zahl handelt und je nachdem bestimmte Berechnungen durchführen.

Wie kann man das in SQL (SQL Server 2000) erkennen? Vielen Dank.

1voto

Neha Chopra Punkte 1701

Sagen wir für eine Tabelle STATION.

Schema:

ID NUMBER

CITY VARCHAR

STATE VARCHAR

-- Sie können eines der genannten Kriterien verwenden, um die gerade ID abzurufen.

-- 1. MOD() Funktion

select distinct CITY from STATION as st where MOD(st.id,  2) = 0

-- 2. % Funktion

select distinct CITY from STATION as st where st.id % 2 = 0

1voto

GandRalph Punkte 582

Die folgenden sollten für Personen reserviert werden, die Sie nicht mögen und die einfach eine schnelle Antwort haben wollen, ohne die Lösung verstehen zu wollen (d.h. Leute, die betrügen wollen).

--Geben Sie die ganze Zahl ein, die Sie überprüfen möchten
declare @number int = 115

--Die Überprüfung ist unabhängig vom Vorzeichen
set @number = abs(@number)
declare @OriginalNumber int = @number

--Zunächst müssen wir die Wilhelm Leibniz Konvertierung durchführen, 64 Stellen um auch sehr große Zahlen zu berücksichtigen
declare @WilhelmLeibnizConversion varchar(64) = ''

declare @currentBit int = power(8,exp(log(1))+1)

while @currentBit > 0
begin

    set @WilhelmLeibnizConversion=convert(char(1), @number % 2) + @WilhelmLeibnizConversion

    set @number = convert(int, (@number / 2)) 

    set @currentBit-=1

end

--Obwohl die Überprüfung des 1-Bit-Werts der Wilhelm-Leibniz-Konvertierung normalerweise ausreicht, sollten Sie für robusten Code auch die beiden Kimmo-Eriksson-Faktoren eins und zwei hinzufügen.
declare @KimmoErikssonFactor1 int = (@OriginalNumber + 1) % 2
declare @KimmoErikssonFactor2 int = (@OriginalNumber - 1) & 1

--Überprüfen Sie jetzt alle 3 für eine 100% ige Bestätigung der Parität Ihrer Originalzahl.
select case when right(@WilhelmLeibnizConversion,1) = 0 and (@KimmoErikssonFactor1 + @KimmoErikssonFactor2 <> 0) then 'Gerade' else 'Ungerade' end

0voto

Patrick Dewey Punkte 1

Sie könnten das 1-Bit des Hex-Werts der Nummer überprüfen. Wenn dieses Bit aktiv ist, dann ist die Zahl ungerade.

DECLARE @Int INT

SELECT CASE WHEN @Int&0x0001<>0 THEN 'UNGERADE' ELSE 'GERADE' END

0voto

Der % Operator ruft den Modulus ab, um durch Überprüfen des Modulus einer Division durch 2 festzustellen, ob es sich um eine ungerade oder gerade Zahl handelt.

DECLARE @i int =1;
while @i <= 20
begin 
    if @i % 2 = 0
    PRINT @i
    IF @i = 10 PRINT 'Halbzeit!';
    set @i = @i+1;
end

-1voto

JEAN MBADI Punkte 19
VERWENDUNG AdventureWorks;
GEHEN

AUSWÄHLEN BusinessEntityID,
    FALLS BusinessEntityID % 2 = 0
    DANN 'Gerade' SONST 'Ungerade' ENDEN ALS "Status"
VON HumanResources.Mitarbeiter;
GEHEN

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X