Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Effettuare il padding delle stringhe in SQL Server
Scritto da Rocco Galati il 30-04-2009 ore 10:53
Al contrario di quanto avviene con molti altri sistemi di gestione di basi di dati, il linguaggio utilizzato in SQL Server non prevede il padding delle stringhe, ovvero quell'operazione che permette di aggiungere ulteriori caratteri all'inizio o alla fine di queste.

Tim Ford ha realizzato una funzione, che consente di effettuare il padding con un numero di caratteri stabilito dall'utente a seconda delle necessità. Anche se il Transact SQL non dispone di una funzione simile a lpad() o rpad(), le quali invece sono presenti su altri sistemi, il Server SQL è dotato della funzione REPLICATE(), che può essere impiegata per realizzare una semplice funzione di padding ed è definita nel modo seguente:
  1. REPLICATE ( string_expression, integer_expression )
dove il secondo parametro è un intero ed indica il numero di volte che deve essere ripetuta la stringa passata; invece, come primo argomento:
  1. SELECT REPLICATE('ABCDE|', 3)  
  2. -----
  3. ABCDE|ABCDE|ABCDE|
  4.  
  5. (1 row(s) affected)
La funzione ideata per effettuare il padding è riportata nel seguito e utilizza come valore di ritorno una stringa lunga al massimo cento caratteri, visto che, in ogni caso, la funzione REPLICATE() può ritornarne una di dimensione massima pari a 8000 byte.
  1. CREATE FUNCTION [dbo].[usp_pad_string] 
  2.  (
  3.  @string_unpadded VARCHAR(100), 
  4.  @pad_char VARCHAR(1), 
  5.  @pad_count tinyint, 
  6.  @pad_pattern INT)
  7. RETURNS VARCHAR(100)
  8. AS
  9. BEGIN
  10.  DECLARE @string_padded VARCHAR(100)
  11.  
  12.  SELECT @string_padded = 
  13.  CASE @pad_pattern
  14.    WHEN 0 THEN REPLICATE(@pad_char, @pad_count) + @string_unpadded --pad left
  15.    WHEN 1 THEN @string_unpadded + REPLICATE(@pad_char, @pad_count) --pad right
  16.    WHEN 2 THEN 
  17.      --pad center 
  18.      LEFT(@string_unpadded, FLOOR(LEN(@string_unpadded)/2)) 
  19.      + REPLICATE(@pad_char, @pad_count) 
  20.      + RIGHT(@string_unpadded, LEN(@string_unpadded) - FLOOR(LEN(@string_unpadded)/2)) 
  21.    WHEN 3 THEN 
  22.      --pad edges
  23.      REPLICATE(@pad_char, FLOOR(@pad_count/2)) 
  24.      + @string_unpadded 
  25.      + REPLICATE(@pad_char, @pad_count - FLOOR(@pad_count/2))  
  26.  END
  27.  RETURN @string_padded
  28. END
Precedente: Intel Software Conference 2009: il futuro della programmazione parallela (1/4)
Successiva: Il sonniloquio dei computer per risparmiare energia
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.272 secondi.