Wahrscheinlich eine neue Frage, aber ...
Ich habe eine Tabelle mit einem VARCHAR-Feld, das die Zahlen 1 bis 300 enthält. Ich muss eine führende Null vor Zahlen unter 10 setzen, während die ursprüngliche Zahl beibehalten wird, wenn sie 10 oder höher ist (dh 1 = 01, 10 = 10 und 300 = 300).
SELECT DISTINCT RIGHT('0'+CONVERT(VARCHAR,[FacilityCode]),3) FROM...
Dies ergibt 1 = 01, 10 = 010 und 300 = 300 (unter Verwendung der gleichen Beispiele wie oben)
BEARBEITEN: Ich versuche dies innerhalb einer Abfrage zu tun, damit ich nachschlagen kann, ohne eine der Tabellen zu ändern.
Kann hier jemand einem Bruder helfen? Mein Gehirn funktioniert einfach nicht.
sql-server
sql-server-2008-r2
number-formatting
SnagQueensHubby
quelle
quelle
1
zu sein001
?Antworten:
Am sichersten ist es wahrscheinlich, nur dann Nullen hinzuzufügen, wenn die Länge der Spalte 1 Zeichen beträgt:
Dies deckt alle Zahlen unter 10 ab und ignoriert auch alle Zahlen, die bereits eine führende 0 haben.
BEARBEITEN
Um nur die Daten auszuwählen, versuchen Sie:
quelle
(Aus Ihrem Beispielcode geht hervor, dass Sie MS SQL Server verwenden, aber Sie sollten Ihrer Frage ein geeignetes Tag (und / oder einen Text) hinzufügen, um dies anzugeben, wenn ja, oder wenn nicht, welches DBMS Sie tatsächlich verwenden.)
Jede der oben genannten Optionen sollte
RIGHT()
einwandfrei funktionieren. Ich würde im Allgemeinen das "Präfix 0s" verwenden und dann die Option verwenden, wie Sie es getan haben, aber die anderen sind vollkommen gültig. Aber ein Wort der Warnung, wenn Sie erwarten, dass neue Zeilen (oder Aktualisierungen vorhandener Zeilen) enthalten Niedrige Zahlen - Wenn dies möglich ist, schleichen sich ungepolsterte Werte wieder ein. Um dies zu vermeiden, können Sie entweder einenAFTER
oder einenINSTEAD OF
Trigger verwenden, um Werte in das richtige Format zu zwingen, wenn sie eingefügt / aktualisiert werden, um zu verhindern, dass das Problem erneut auftritt (ohne Sie müssen jedoch alle Codepunkte ändern, die in dieser Tabelle gespeichert werden. Überprüfen Sie jedoch die Leistung: Trigger können sehr leistungsfähig sein, aber es ist auch einfach, mit ihnen einen Leistungsalptraum zu erstellen.quelle
Sie können hierfür eine case-Anweisung verwenden, wenn diese in der Datenbank formatiert sein muss und Sie sie nicht beibehalten können.
Es hört sich so an, als würden Sie dies als FK tun. Wenn ja, können Sie keine FK-Einschränkung für eine Berechnung haben. Um die Verknüpfung zu vereinfachen, können Sie eine berechnete Spalte in Betracht ziehen.
quelle
Wenn Sie eine dreistellige Nummer möchten, versuchen Sie dies.
Ergebnis: 1 = 001, 10 = 010 und 300 = 300
Eine 8-stellige Nummer wäre:
Ergebnis: 1 = 00000001, 10 = 00000010 und 300 = 00000300
Dies hat den Vorteil, mit Unterabfragen zu arbeiten:
quelle
quelle
LEN
(wie in der Antwort von JNK) anstelle von verwenden würdeLIKE
.MyColumn
ist ein varchar, daher führt die BedingungMyColumn < '10'
nicht dazu,TRUE
wenn der Wert in der Spalte'2'
oder'3'
oder ... ist'9'
. Für char-Werte'9' < '10'
ist false.MyColumn < 10
aber das könnte brechen , wie wir wissen nicht , obMyColumn
ist garantiert , immer nur Zahlen enthalten.quelle