Hola libras, antes que nada gracias por tu tiempo y tu ayuda, fijate que intente hacer eso que me pusiste, pero al final da el mismo resultado, en tu ejemplo se veia todo bien pero el problema es cuando ya hay numeros arriba de 10, se comienzan a mezclar
Código SQL:
Ver originalCREATE TABLE #temp
(
valor VARCHAR(20)
)
INSERT INTO #temp VALUES ('4')
INSERT INTO #temp VALUES ('2')
INSERT INTO #temp VALUES ('3')
INSERT INTO #temp VALUES ('1')
INSERT INTO #temp VALUES ('10')
INSERT INTO #temp VALUES ('11')
INSERT INTO #temp VALUES ('A1')
INSERT INTO #temp VALUES ('A2')
INSERT INTO #temp VALUES ('5')
INSERT INTO #temp VALUES ('6')
INSERT INTO #temp VALUES ('A3')
INSERT INTO #temp VALUES ('B1')
INSERT INTO #temp VALUES ('7')
SELECT CONVERT(VARCHAR(20),campo) FROM(
SELECT CASE WHEN isnumeric(valor)=1 THEN CONVERT(INT,valor) END campo FROM #temp
) AS t1 WHERE campo IS NOT NULL
UNION
SELECT * FROM(
SELECT CASE WHEN isnumeric(valor)=0 THEN valor END campo FROM #temp
) AS t1 WHERE campo IS NOT NULL
Lanza este resultado:
Conoces alguna otra forma de hacerlo? yo ya estuve probando hasta con el case when else:
Código SQL:
Ver originalSELECT CASE WHEN isnumeric(CODIGO)=1 THEN CONVERT(INT,CODIGO) ELSE CODIGO END AS campo FROM dbo.PAQUETE
Pero aunque le ponga el else siempre trata de hacer la conversión cuando hay letras y me tira error.
De antemano muchas gracias por la ayuda