Wie Operator für Ganzzahl

8

Ich habe eine Spalte vom Typ bigint (ProductSerial) in meiner Tabelle. Ich muss die Tabelle durch die Produktserie mit einem ähnlichen Operator filtern. Aber ich fand, dass, wie der Operator nicht für Integer-Typ verwendet werden kann.

Gibt es eine andere Methode dafür (ich möchte den Operator = nicht verwenden).

    
Raging Bull 27.08.2013, 09:59
quelle

5 Antworten

11

Wenn Sie LIKE verwenden müssen, können Sie Ihre Nummer in char / varchar umwandeln und das LIKE im Ergebnis ausführen. Dies ist ziemlich ineffizient, aber da LIKE ohnehin ein hohes Potenzial zum Abtöten von Indizes hat, könnte es in Ihrem Szenario funktionieren:

%Vor%

Wenn Sie LIKE verwenden möchten, um den Anfang oder das Ende der Zahl abzugleichen, können Sie die Ziffern mit Hilfe von Ganzzahldivisions- und -modulusoperatoren extrahieren. Wenn Sie beispielsweise alle neunstelligen Zahlen in 407 suchen möchten, suchen Sie nach

%Vor%     
dasblinkenlight 27.08.2013, 10:05
quelle
1

Sie können Ihre Feld PhoneNumbers ändern und speichern als String und verwenden Sie dann die Sie können Ihre Tabelle ändern, so dass Sie die LIKE-Anweisung verwenden können, wenn Sie immer noch BIGint für Ihre Telefonnummern verwenden möchten, können Sie nicht das genaue Telefon abrufen Nummer ohne Verwendung = Die Methode, die Sie verwenden können, ist die Between-Methode, die nach den Zahlen im Bereich sucht.

Für die editierte Frage: Ich denke, Sie sollten = für ihre ID = verwenden, oder den Int in String konvertieren und dann Like verwenden.

    
user2705620 27.08.2013 10:06
quelle
1

Obwohl ich ein wenig zu spät zur Party komme, möchte ich die Methode hinzufügen, die ich verwende, um die ersten N Zahlen (im Beispiel 123) in jeder numerischen Spalte zu finden:

%Vor%

Die Technik ähnelt der von @ dasblinkenlight, funktioniert aber unabhängig von der Anzahl der Ziffern der Zielspaltenwerte. Dies ist eine praktikable Lösung, wenn Ihre Spalte Nummern mit unterschiedlicher Länge enthält und Sie nicht die CAST + LIKE-Methode (oder eine berechnete Spalte) verwenden möchten.

Weitere Details dazu (und anderen LIKE-Problemumgehungen) finden Sie unter diesen Beitrag lesen .

    
Darkseal 16.02.2018 16:52
quelle
0

Die ursprüngliche Frage bezüglich einer Telefonnummer. OP hat es seitdem bearbeitet, um auf Seriennummern zu verweisen. Diese Antwort bezieht sich nur auf die ursprüngliche Frage.

Ich schlage vor, dass Sie Ihre Telefonnummern nicht als Integer speichern und das Problem damit nicht auftritt. Meine Telefonnummer ist in der Form international:

%Vor%

Wenn Sie es als Integer speichern, ergibt das keinen Sinn, da Sie nie eine mathematische Operation ausführen müssen und das führende Plus verlieren würde. Innerhalb Großbritanniens ist es:

%Vor%

und somit speichert es als eine ganze Zahl würde die führende Null verlieren. Sofern Sie nicht eine sehr sehr spezifische Anforderung haben, um es als Integer zu speichern, würden Sie es wesentlich besser als String speichern.

[Hinweis: Nicht wirklich meine Telefonnummer]

    
Adrian Wragg 27.08.2013 10:05
quelle
0

Wenn Sie die Kontrolle über die Datenbank haben, können Sie eine berechnete Spalte hinzufügen, um den ganzzahligen Wert in eine Zeichenkette zu kopieren:

%Vor%

Und Frage wie:

%Vor%

Dies verschiebt die Berechnung in die Einfügung / Aktualisierung und nur in Zeilen, die eingefügt / aktualisiert werden, und konvertiert dann jede Zeile für jede Abfrage. Dies kann ein Problem sein, wenn viele Spalten aktualisiert werden, da diese einen sehr geringen Aufwand verursachen.

Es mag einen mathematischen Weg geben, den Modulus zu benutzen, aber das würde viel Arbeit und Tests erfordern.

    
bendataclear 27.08.2013 11:34
quelle

Tags und Links