24/01/2012, 12:08
|
| Colaborador | | Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 11 meses Puntos: 38 | |
Respuesta: Orden Select "Natural" Suponiendo que son dos partes concatenadas dentro de un mismo campo...
Separandolas se ordena por ambos campos y para que las que no tienen parte numerica vayan al final se toman como 99999
Podriamos hacer..
Código:
SELECT TEXTO
---------------------------------------------------------------------------------------------------
,
CASE WHEN ISNUMERIC(TEXTO) = 1 THEN RIGHT('00000' + TEXTO, 5)
WHEN CHARINDEX('-',TEXTO, 1) > 0 THEN RIGHT('00000' + SUBSTRING(TEXTO, 1, CHARINDEX('-',TEXTO, 1) - 1), 5)
ELSE '99999' END [PARTE NUMERICA]
---------------------------------------------------------------------------------------------------
, CASE WHEN ISNUMERIC(TEXTO) = 1 THEN ''
WHEN CHARINDEX('-',TEXTO, 1) > 0 THEN SUBSTRING(TEXTO, CHARINDEX('-',TEXTO, 1), LEN(TEXTO))
ELSE TEXTO END [PARTE TEXTO]
--SUBSTRING(TEXTO, 1,
FROM (
SELECT 'V2' TEXTO
UNION ALL
SELECT 'V1'
UNION ALL
SELECT '1'
UNION ALL
SELECT '2'
UNION ALL
SELECT '10'
UNION ALL
SELECT '11'
UNION ALL
SELECT '1-V1'
UNION ALL
SELECT '2-B11'
UNION ALL
SELECT '10-A23'
UNION ALL
SELECT '11-A23'
UNION ALL
SELECT '12-A11'
UNION ALL
SELECT 'PV8'
) S
ORDER BY 2,3
Resultando:
Código:
TEXTO PARTE NUMERICA PARTE TEXTO
------ -------------- -----------
1 00001
1-V1 00001 -V1
2 00002
2-B11 00002 -B11
10 00010
10-A23 00010 -A23
11 00011
11-A23 00011 -A23
12-A11 00012 -A11
PV8 99999 PV8
V1 99999 V1
V2 99999 V2
(12 row(s) affected)
Es solo plasmar en un flujo logico las operaciones que mentalmente hacemos sin darnos cuenta.. Saludos!
__________________ La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
Última edición por Andres95; 24/01/2012 a las 16:31 |