Ich muss Zeichen in einer Zeichenfolgendarstellung einer hexadezimalen Zahl neu anordnen. Hier ist ein Beispiel für eine Eingabe (obere Zeichenfolge) und das gewünschte Ergebnis (untere Zeichenfolge). Hexadezimale Zeichenfolge in T-SQL neu anordnen
Ich habe hier Code aus diesem Kerl entlehnt: http://dpatrickcaldwell.blogspot.hr/2009/05/converting-decimal-to-hexadecimal-with.html Danke, Mann! Das sollte für mich eine Dez-zu-Hex Konvertierung sein, und es funktioniert, ich habe es getestet.
hier ist jetzt mein T-SQL-Code, der das Bewegen um die Teile Teil behandeln soll:
CREATE FUNCTION DecodeDecKeyCard
(
@value AS BIGINT
) RETURNS CHAR(8) AS BEGIN
DECLARE @convertedNum VARCHAR(MAX),
@result CHAR(8) = '',
@flag INT = 1,
@loop INT = 4;
SELECT @convertedNum = dbo.ConvertToBase(@value, 16);
WHILE @loop > 0
BEGIN
SELECT @result = @result + SUBSTRING(@convertedNum, (@loop*2) - @flag, 1);
IF(@flag = 1)
SET @flag = 0;
ELSE
SET @flag = 1;
SET @loop = @loop -1;
END
RETURN @result
END
Da ich eine komplette Noob bin, wenn es um SQL kommt, ich weiß nicht, wie dies zu debuggen. Ich habe ein paar Sachen darüber gegoogelt, aber die Ergebnisse verweisen mich immer wieder auf bezahlte Versionen von VS und einige Hacks oder was auch immer ... Um ehrlich zu sein, bin ich knapp bei der Zeit (und dem Geld), um das selbst einzurichten im Augenblick.
Einige Dinge zu dem obigen Code verwendet:
- Ich weiß, dass ich immer eine 10-stellige Dezimalzahl als Parameter wird in einer 8-stelligen Hex-Zahl immer führt
- Ich weiß, erhalten
- dbo.ConvertToBase ist die bereits erwähnte ‚ausgeliehen‘ Funktion
EDIT: Der Code, den ich im Moment führt zu keinen Daten zurückgegeben zu werden ... Die hex-Zahl ist t von Anfang an als String wiedergegeben.
Ich möchte es wies wieso mein Code nicht funktioniert?
Ihre Funktion funktioniert also nicht wie erwartet? Sie sagten, Sie erhalten einen 10-stelligen Eingang, zeigen aber einen 8-stelligen Eingang. hast du einfach die 0x fallen lassen? – scsimon
Die Hexadezimalzahl wird nie als INT behandelt, also ist 0x unnötig. Ich werde die Frage so bearbeiten, dass sie klarer ist. – Jakov
Entschuldigung, ich habe gerade herausgefunden, was du meintest. Das Argument, das die Funktion empfängt, ist eine 10-stellige lange Zahl. ** Diese Nummer wird dann in eine 8-stellige Hexadezimalzahl umgewandelt, die als String ** dargestellt wird. Und dann wird diese Nummer in der im Bild gezeigten Weise neu angeordnet. – Jakov