2016-06-11 17 views
0

Mit SQL-Skripten muss ich den Comma Separate-Wert überprüfen. Wie sollte ich die Stringvariable validieren?SQL Überprüfung einer String-Variablen

Die Validierung sollte sowohl rechts/links als auch für jeden Wert erfolgen. Für den letzten Wert sollte es keine Sonderzeichen wie Komma oder Periode geben.

create table #test 
(col varchar(100)) 

insert into #test values 
('1,2'), 
('1,2,'), 
('1,'), 
('1,2,3,4,5') 


select * from #test 

In der obigen Abfrage, für den zweiten Wert - Erwartetes Ergebnis ist 1,2 In der obigen Abfrage, für die dritte Wert - Erwartetes Ergebnis ist 1

+0

Was genau meinen Sie mit * "validate from SQL" *? Benötigen Sie eine SQL, die alle ungültigen Werte zurückgibt? Oder alle gültigen? Oder ein zusätzliches Feld, das angibt, ob der Name gültig ist oder nicht? – Heinzi

+0

@Heinzi, Ich habe meinen Beitrag mit klarer Erklärung bearbeitet. – goofyui

Antwort

1

Sie können Ihre Tabelle aktualisieren, um "anstößige" Werte zu korrigieren.

update #test 
set col = substring(col, 1, len(col) - 1) 
where col not like '%[0-9]' 

Dadurch wird das letzte Zeichen entfernt, bei dem der Wert nicht durch eine Ziffer endet.

+0

Ihre Syntax Logik hilft mir. Dies behebt das Datenproblem, ich kann es nach meinen Bedürfnissen anpassen. Danke vielmals !! – goofyui

+0

Wirst du mir bitte in diesem Beitrag helfen: http://stackoverflow.com/questions/37766643/sql-compare-varchar-variable-with-another-varchar-variable – goofyui

1

Sie eine Check-Einschränkung nutzen können. Sie scheinen so etwas zu wollen:

alter table t add constraint chk_name as 
    (name like '%,%' and 
    name not like '%,%,%' and 
    name not like '%[^a-zA-Z,]%' 
    ) 

SQL Server unterstützt keine regulären Ausdrücke. Dies setzt die Regeln:

  • Namen hat ein Komma haben
  • Namen hat nicht zwei Kommas
  • Namen nur aus Buchstaben besteht und ein Komma

Sie können feststellen, dass Sie brauchen etwas mehr Flexibilität, aber dies behandelt die Fälle in Ihrer Frage.

+0

Ich kann die Tabelle nicht ändern. Ich muss am Datenteil arbeiten. Datenbank gehört Dritten. – goofyui

+0

@goofyui. . . Sie können dieselbe Logik in einem 'where' oder' case' verwenden. Ihre Frage besagt, dass Sie Daten validieren möchten, und das ist eine Check-Einschränkung. –

+0

Danke Gordon, nicht sicher, ob ich es bekommen konnte. Ich habe versucht mit Beispielabfrage, es hat nicht funktioniert. Ich habe eine Abfrage der Beispieltemp-Tabelle im ursprünglichen Posting gepostet. Bitte schau es dir an. – goofyui

Verwandte Themen