RSS
Facebook
G+

Buscador de IntercambioSOS:


Retroceder   Foro de Ayuda IntercambiosvirtualeS > Soporte Sobre: Educación & Entretenimiento > Zona Académica > Programación
Comunidad

Respuesta
 
Herramientas Desplegado
Antiguo 23-dic-2010     #1
Predeterminado * Blog * Descargas * Regular Expression Tester Implementar la función split en T-SQL

El siguiente código muestra cómo crear la función con valor de tabla para que admite tres parámetros: la cadena que queremos separar, el carácter delimitador y el número de resultados que queremos que nos devuelva. Este último parámetro es opcional, así que si le pasamos el valor NULL como tercer parámetro, la función nos devolverá todos los registros.


Código PHP:
CREATE FUNCTION StringSplit
(
    @
String AS VARCHAR(2048),
    @
Separator AS CHAR(1),
    @
Count AS INT
)
RETURNS TABLE
AS
RETURN
(
  
SELECT TOP (ISNULL(@Count2147483647))
    
SUBSTRING(
        @
String,
        
Number,
        
CHARINDEX(@Separator, @String + @SeparatorNumber) - Number
        
) AS [Substring]
  
FROM
    master
..spt_values
  WHERE
    
[Type]='P'
    
AND Number BETWEEN 1 AND LEN(@String) + 1
    
AND SUBSTRING(@Separator + @StringNumber1) = @Separator

La forma de utilizar esta función es la siguiente:

Código PHP:
SELECT Substring FROM StringSplit('Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo'','NULL); 

Por último, sólo queda comentar que la limitación de esta función está en la propia tabla auxiliar (master..spt_values), ya que al contener sólo 2048 números consecutivos no puede tratar cadenas de texto más largas. Si tuviesemos que tratar tamaños superiores, deberíamos crear una tabla auxiliar con más números consecutivos.

Los métodos XML para crear la función split. La principal ventaja respecto al método que expliqué en arriba es que no tiene la limitación de los 2048 carácteres y puede tratar cadenas de cualquier longitud. Aquí dejo el código que modifica la función StringSplit.

Código PHP:
ALTER FUNCTION StringSplit
(
  @
String NVARCHAR(MAX),
  @
Separator CHAR(1),
  @
Count AS INT
RETURNS @t TABLE ([SubstringNVARCHAR(max))
AS
BEGIN
  
DECLARE @xml xml N'<root><i>' REPLACE(@String,@Separator,'</i><i>') + '</i></root>'

  
INSERT INTO @t([Substring])
  
SELECT TOP (ISNULL(@Count2147483647))
    
r.value('.','varchar(5)') AS Value
  FROM 
@xml.nodes('//root/i') AS records(r)

  RETURN
END 

"El hombre es esclavo de sus palabras y dueño de su silencio"

"No hay nada más bello que vivir"... R.I.P. Jaime Moreno Garcia
Responder Citando
Usuarios que han agradecido este mensaje de sasuke.17
jchierro (23-dic-2010)
Antiguo 23-dic-2010     #2
Predeterminado

gracias compañero... !!!


salu2
Responder Citando
Antiguo 24-dic-2010     #3
Predeterminado




intercambiosvirtuales.org
Enviar un mensaje por MSN a wpiaw Responder Citando
Antiguo 28-dic-2010     #4
Predeterminado



La vida es lo que pasa mientras se instalan las actualizaciones de Windows
Responder Citando
Antiguo 28-dic-2010     #5
Predeterminado

Gracias por compartir compañero ..

Responder Citando
Antiguo 28-dic-2010     #6
Predeterminado

Gracias por compartir

Saludos




El que busca la verdad corre el riesgo de encontrarla.
Responder Citando
Respuesta


(0 miembros y 1 visitantes)
 

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado

Ir al Foro


Desarrollado por: vBulletin® Versión 3.8.1
Derechos de Autor ©2000 - 2024, Jelsoft Enterprises Ltd.
Ad Management by RedTyger