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:
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:
SELECT REPLICATE('ABCDE|', 3) -----
ABCDE|ABCDE|ABCDE|
(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.CREATE FUNCTION [dbo].[usp_pad_string]
(
@string_unpadded VARCHAR(100),
@pad_char VARCHAR(1),
@pad_count tinyint,
@pad_pattern INT)
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @string_padded VARCHAR(100)
SELECT @string_padded =
CASE @pad_pattern
WHEN 0 THEN REPLICATE(@pad_char, @pad_count) + @string_unpadded --pad left
WHEN 1 THEN @string_unpadded + REPLICATE(@pad_char, @pad_count) --pad right
WHEN 2 THEN
--pad center
LEFT(@string_unpadded, FLOOR(LEN(@string_unpadded)/2))
+ REPLICATE(@pad_char, @pad_count)
+ RIGHT(@string_unpadded, LEN(@string_unpadded) - FLOOR(LEN(@string_unpadded)/2))
WHEN 3 THEN
--pad edges
REPLICATE(@pad_char, FLOOR(@pad_count/2))
+ @string_unpadded
+ REPLICATE(@pad_char, @pad_count - FLOOR(@pad_count/2))
END
RETURN @string_padded
END