2017-04-25 4 views
3
Select len(productid),productid,* 
FROM dbo.produts 
    where Place = 'KA' 
    and len(productid) <> 10 
    order by len(productid) 

diese Abfrage der Daten filtert, die aktualisiert werden muss - ich brauche die Daten in ‚productid‘ zu aktualisieren, die nicht im richtigen Format ist - (die Daten sollten 10 Zeichen im Format 4-2-4 mit führenden Nullen, wo sie benötigt werden. (Produkt-Spalte ist eine Varchar (256) -Spalte) Im Grunde muss ich führende Nullen zu einer Varchar-Spalte mit einer WHERE-Bedingunghinzufügen führende Nullen zu einer Varchar-Spalte

hinzufügen
|productid| |Correct productid value| | 
--------------------------------------- 
|234-55-43||000234-55-43| 

|76-7-89||0000076-7-89| 

Was sind die möglichen Lösungen für die Aktualisierung dieser Datensätze?

Antwort

1

Wenn Sie das korrigierte Format sein im 4-2-4-Format Sie erwähnt haben wollte:

parsename() Mit den Stücken der analysieren, Zeichenfolge und right(), um die zusätzlichen '0' s hinzufügen.

select 
    col 
    , Corrected = right('0000'+parsename(replace(col,'-','.'),3),4) 
    + '-' + right('00'+parsename(replace(col,'-','.'),2),2) 
    + '-' + right('0000'+parsename(replace(col,'-','.'),1),4) 
from t 
where col not like '____-__-____' 

rextester Demo: http://rextester.com/OXM28014

kehrt:

+-----------+--------------+ 
| col | Corrected | 
+-----------+--------------+ 
| 234-55-43 | 0234-55-0043 | 
| 76-7-89 | 0076-07-0089 | 
+-----------+--------------+ 

Als Update:

update t 
    set col = right('0000'+parsename(replace(col,'-','.'),3),4) 
      + '-' + right('00'+parsename(replace(col,'-','.'),2),2) 
      + '-' + right('0000'+parsename(replace(col,'-','.'),1),4) 
where col not like '____-__-____' 
3

Dies ist sehr einfach, eigentlich:

SELECT productid, 
     RIGHT('000000000'+productid,10) CorrectProductid 
FROM dbo.YourTable 
; 
Verwandte Themen