2017-03-15 4 views
-1

Ich habe ein Tabellenkonto enthält die Attribute id und account number.Überprüfen Sie den Formatcode mit SQL Server

id account number 
-------------------- 
1 007-000068 
2 007-000069 

Ich brauche eine Kontonummer verifiy wenn es in diesem Format "XXX-XXXXXXXX" ist, ist X variable

+0

Dies ist offensichtlich machbar, und Gordons Antwort würde weit über verschiedene SQL-Technologien funktionieren, aber ist SQL der richtige Ort für diese Validierung? Nur etwas zum Nachdenken. –

+0

Willkommen bei SO. Bitte werfen Sie einen Blick auf [Tour]. Sie können auch prüfen, [Welche Themen kann ich fragen] (http://stackoverflow.com/help/on-topic) und [fragen], und wie Sie ein [mcve] erstellen. Veröffentlichen Sie den Code, den Sie versucht haben, und die Fehler, die Sie erhalten haben. Sei so genau wie möglich, denn das führt zu besseren Antworten. – happymacarts

Antwort

0

Die folgende Arbeit soll (wählen Sie die Sie brauchen):

SELECT id, [account number] 
    , IIF([account number] LIKE '___-________', 1, 0) AS IsValidStructure 
    , IIF([account number] LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]', 1, 0) 
     AS IsValidWithOnlyDigits 
FROM TableName 

Weitere Erklärung siehe offizielle Dokumentation zu möglichen Platzhaltern: https://msdn.microsoft.com/en-us/library/ms179859.aspx

Hinweis: Die IIF Klausel ist von SQL Server 2012 verfügbar. Für niedrigere Versionen CASE sollte wie Gordon Linoff in seiner Antwort verwendet werden.

+1

Es ist erwähnenswert, dass "IIF" erst ab 2012 verfügbar ist, wenn OP eine ältere Version von SQL Server verwendet. –

+0

Danke, dass du darauf hingewiesen hast, ich füge es der Antwort hinzu. –

2

Ich würde vorschlagen, dieses Muster mit:

select id, accountnumber, 
     (case when accountnumber like '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 
      then 1 else 0 
     end) as isValid 

Dies setzt voraus, dass Sie in jedem der Positionen Ziffern erwarten.

+1

Führen Sie dieses einmal aus, um alle zu reparierenden Probleme zu finden, und machen Sie es dann zu einer Prüfbedingung, um weitere Probleme zu vermeiden: * alter table account Bedingung hinzufügen CK_account_account_number ([Kontonummer] wie '[0-9] [0-9] [ 0-9] - [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] '); * Auch , denke darüber nach, die Leerzeichen in deinem Spaltennamen zu entfernen, es wird mühsam sein, es überall zu [Klammern]. –

Verwandte Themen