2017-04-11 2 views
-1

i eine Tabelle, die Spalten enthältselect-Anweisung Spalte zu kürzen und fügen Sie Werte

[id],[StartsWith],[Length] ,[MinExt] ,[MaxExt],[isDID] ,[DeleteDigits] ,[AppendDigits] 

208 ,  61  , 5 , 61000 , 61999 , 0 ,  2  , 22058 

209 ,  63  , 5 , 63000 , 63999 , 0 ,  2  , 26518 

jetzt lassen annehmen, wenn der Benutzer eine Nummer 61205 sendet sagen, dass ich diese Zeile in dem überprüfen, dass Nummer (dh 61205) existieren durch Überprüfung zwischen MinExt und MaxExt

danach muss ich x Ziffern von 61205 in den entsprechenden deleteDigits vom Anfang der Zahl (in diesem Fall werden 2 Ziffern abgeschnitten) abgeschnitten werden, nachdem truncate ich 205 im letzten von anhängen muss [appenddigits] -Spalte. , die eine vollständige Nummer wie 22058205 machen wird.

Ich muss dies durch Select-Anweisung tun, da es eine innere Abfrage sein wird. oder wenn jemand etwas anderes vorschlagen kann, werde ich sehr dankbar sein.

+0

Sind Sie sicher, dass das erwartete Ergebnis ist 22.058.205? truncate bedeutet in der Regel das Entfernen der letzten Ziffern und das Anhängen erfolgt normalerweise am Ende, sodass eine Zahl von 61222058 für mich sinnvoller erscheint. – xQbert

+0

jedes Mal nehmen Sie die letzten 3 Ziffern oder Sie schneiden die ersten 2 Ziffern? – Rams

+1

was hast du bis jetzt probiert? – etsa

Antwort

0

Wenn die in Ihrer Frage erwähnte Nachschlagetabelle wenige Zeilen enthält, können Sie hierfür eine mehrstufige Case-Anweisung verwenden. Obwohl es umständlich aussehen würde, wird es den Job perfekt ohne Abhängigkeit von anderem Code erledigen.

Wenn diese Tabelle wahrscheinlich viele Zeilen enthält, möchten Sie möglicherweise eine benutzerdefinierte SQL Server-Funktion verwenden.

+0

Nachschlagetabelle hat viele Zeilen mehr als 4000. und für benutzerdefinierte Funktion bedeutet, ich muss Funktion für jede Nummer aufrufen (wenn Benutzer mehr als eine Nummer sendet)? –

+0

Danke für Ihren Rat, ich habe eine gespeicherte Prozedur erstellt und dann die Lopic implementiert. danke nochmal –

+0

Ok. Wenn Sie nur für zukünftige Anforderungen ähnlicher Art sagen, hilft Ihnen die Verwendung einer benutzerdefinierten Funktion (Inline-Funktionen), sie immer noch in einer ausgewählten Abfrage oder einer inneren Abfrage zu verwenden. Haben Sie einen guten Tag. –

1

Try this:

DECLARE @VAL NVARCHAR(100) = '61205' 

SELECT AppendDigits + SUBSTRING(@VAL, 3, LEN(@VAL) - 2) 
FROM YOUR_TABLE 
WHERE CAST(@VAL AS int) BETWEEN MinExt AND MaxExt 
+0

danke für Ihre Antwort, aber ich brauche Lösung als eine innere Abfrage –

+0

Ich markiere dies als Antwort, wie ich meine Anforderung von inneren Abfrage auf gespeicherte Prozedur geändert und dann habe ich Ihre Abfrage verwendet. Danke, es hat geholfen. –

Verwandte Themen