Microsoft SQL Server
La función COSAS
Buscar..
Parámetros
Parámetro | Detalles |
---|---|
expresión_caracteres | la cadena existente en sus datos |
Posición de salida | la posición en character_expression para eliminar la length y luego insertar la replacement_string |
longitud | el número de caracteres que se eliminarán de la expresión de character_expression |
remplazo de cadena | La secuencia de caracteres para insertar en character_expression |
Reemplazo de personaje básico con STUFF ()
La función STUFF()
inserta una cadena en otra cadena al eliminar primero un número específico de caracteres. El siguiente ejemplo, elimina "Svr" y lo reemplaza por "Servidor". Esto sucede al especificar la posición de start_position
y la length
del reemplazo.
SELECT STUFF('SQL Svr Documentation', 5, 3, 'Server')
La ejecución de este ejemplo dará como resultado la devolución de la SQL Server Documentation
lugar de la SQL Server Documentation
de SQL Svr Documentation.
Uso de FOR XML para concatenar valores de varias filas
Un uso común de la función FOR XML
es concatenar los valores de varias filas.
Aquí hay un ejemplo usando la tabla Clientes :
SELECT
STUFF( (SELECT ';' + Email
FROM Customers
where (Email is not null and Email <> '')
ORDER BY Email ASC
FOR XML PATH('')),
1, 1, '')
En el ejemplo anterior, FOR XML PATH(''))
se usa para concatenar direcciones de correo electrónico, usando ;
Como el caracter delimitador. Además, el propósito de STUFF
es eliminar el líder ;
De la cadena concatenada. STUFF
también está STUFF
implícitamente la cadena concatenada de XML a varchar.
Nota: el resultado del ejemplo anterior será XML codificado, lo que significa que reemplazará <
caracteres con <
etc. Si no desea esto, cambie FOR XML PATH(''))
a FOR XML PATH, TYPE).value('.[1]','varchar(MAX)')
, por ejemplo:
SELECT
STUFF( (SELECT ';' + Email
FROM Customers
where (Email is not null and Email <> '')
ORDER BY Email ASC
FOR XML PATH, TYPE).value('.[1]','varchar(900)'),
1, 1, '')
Esto se puede usar para lograr un resultado similar a GROUP_CONCAT
en MySQL o string_agg
en PostgreSQL 9.0+, aunque usamos subconsultas en lugar de agregados de GROUP BY. (Como alternativa, puede instalar un agregado definido por el usuario como este si está buscando una funcionalidad más cercana a la de GROUP_CONCAT
).
Obtener nombres de columna separados por comas (no una lista)
/*
The result can be use for fast way to use columns on Insertion/Updates.
Works with tables and views.
Example: eTableColumns 'Customers'
ColumnNames
------------------------------------------------------
Id, FName, LName, Email, PhoneNumber, PreferredContact
INSERT INTO Customers (Id, FName, LName, Email, PhoneNumber, PreferredContact)
VALUES (5, 'Ringo', 'Star', '[email protected]', NULL, 'EMAIL')
*/
CREATE PROCEDURE eTableColumns (@Table VARCHAR(100))
AS
SELECT ColumnNames =
STUFF( (SELECT ', ' + c.name
FROM
sys.columns c
INNER JOIN
sys.types t ON c.user_type_id = t.user_type_id
WHERE
c.object_id = OBJECT_ID( @Table)
FOR XML PATH, TYPE).value('.[1]','varchar(2000)'),
1, 1, '')
GO
Cosas para comas separadas en servidor sql
FOR XML PATH
y STUFF
para concatenar las múltiples filas en una sola fila:
select distinct t1.id,
STUFF(
(SELECT ', ' + convert(varchar(10), t2.date, 120)
FROM yourtable t2
where t1.id = t2.id
FOR XML PATH (''))
, 1, 1, '') AS date
from yourtable t1;
Ejemplo básico de la función STUFF ().
STUFF (Original_Expression, Start, Length, Replacement_expression)
La función STUFF () inserta Replacement_expression, en la posición de inicio especificada, junto con la eliminación de los caracteres especificados usando el parámetro Length.
Select FirstName, LastName,Email, STUFF(Email, 2, 3, '*****') as StuffedEmail From Employee
Ejecutar este ejemplo resultará en devolver la tabla dada
Nombre de pila | Apellido | StuffedEmail | |
---|---|---|---|
Jomes | Cazador | [email protected] | J*****[email protected] |
Shyam | Rathod | [email protected] | S*****[email protected] |
RAM | brillante | [email protected] | R ***** hotmail.com |