2013-06-25 17 views
5

Ho una colonna nvarchar Ho bisogno di inserire un trattino in punti fissi all'interno della stringa. Il trattino bisogno di andare tra il carattere più a destra e l'altro, e di nuovo in 3 ° posizione da destra, come ad esempio: valore della colonna èInserisci carattere nella stringa SQL

0000050704 

e ho bisogno di essere

0000050-70-4 

o valore è

0555256321 

e dovrebbe essere

0555256-32-1 

Impossibile vedere come si fa. Qualcuno può darmi un piccolo aiuto?

+2

quale database? – davek

+4

Se è SQL Server, 'STUFF()' è fatto solo per questo ... – JNK

risposta

7

Supponendo che le stringhe siano di lunghezza variabile, è necessario utilizzare REVERSE() o molti valori di LEN() dall'aspetto brutto nell'espressione.

declare @txt varchar(100) = '0000050704' 

--If using SQL Server, the STUFF() function is your friend 
select REVERSE(STUFF(STUFF(REVERSE(@txt), 2, 0, '-'), 5, 0, '-')) 

--if not you'll need to concatenate SUBSTRING()s 
select REVERSE(SUBSTRING(REVERSE(@txt), 1, 1) + '-' + SUBSTRING(REVERSE(@txt),2, 2) + '-' + SUBSTRING(REVERSE(@txt),4, LEN(@txt))) 
1

Dipende dal server SQL. Per favore controlla la documentazione su come manipolare le stringhe - supporrò la funzione SUBSTRING.

In MS SQL Server è possibile eseguire sth. in questo modo:

UPDATE YourTableName SET 
    YourFieldName = 
     SUBSTRING(YourFieldName, 1,7) + "-" + 
     SUBSTRING(YourFieldName, 7,2) + "-" + 
     SUBSTRING(YourFieldName, 9,1) 

Ciò suddividere il contenuto campo in tre parti e ricostruirlo con separatori ...

Prima di eseguire la query vi suggerisco di provare il più semplice SELECT per vedere se funziona come aveva bisogno:

SELECT 
    SUBSTRING(YourFieldName, 1,7) + "-" + 
    SUBSTRING(YourFieldName, 7,2) + "-" + 
    SUBSTRING(YourFieldName, 9,1) 
FROM YourTableName 

Fare attenzione che la query è senza WHERE condizione e quindi interesserà tutte le righe della tabella.

1

È possibile utilizzare questa semplice funzione:

CREATE FUNCTION [dbo].[SetHyphen] (@S varchar(50)) RETURNS varchar(52) 
BEGIN 
RETURN STUFF(STUFF(@S,LEN(@S)-2,0,'-'),LEN(@S)+1,0,'-') 
END 

Ad esempio:

select [dbo].[SetHyphen]('0000050704') 
0000050-70-4 
Problemi correlati