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).
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:
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
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.
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 .
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]
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.