SQL - Se pasó un parámetro de longitud no válido a la función left o substring

 
Vista:
sin imagen de perfil

Se pasó un parámetro de longitud no válido a la función left o substring

Publicado por kanika (19 intervenciones) el 27/05/2014 16:08:52
Hola a tod@s, tengo la siguiente instrucción para extraer un trozo de una cadena:

SUBSTRING(num_pedido, 1, CHARINDEX('/', num_pedido) - 1) AS pedido

y me da el siguiente error de ejecución:

"Se pasó un parámetro de longitud no válido a la función left o substring"

el caso es que sí se ejecuta la instrucción pero siempre con este mensaje

mi servidor es SQL SERVER 2008 R2

¿sabéis que pasa?

Gracias adelantadas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Se pasó un parámetro de longitud no válido a la función left o substring

Publicado por Isaias (1921 intervenciones) el 27/05/2014 17:41:44
Esta instrucción:

CHARINDEX('/', num_pedido) - 1

Te esta dando una posición NO VALIDA.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Se pasó un parámetro de longitud no válido a la función left o substring

Publicado por leonardo_josue (1173 intervenciones) el 27/05/2014 18:14:08
Hola kanika:

ampliando lo que bien comenta Isaías, el problema es que si no se encuentra el caracter '/' en la cadena num_perido, la función CHARINDEX regresa un cero, recordando la documentación oficial:

1
2
3
4
CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )
...
Si expressionToFind no se encuentra en expressionToSearch, CHARINDEX devuelve 0.
...

por lo tanto, al hacer 0 - 1 el resultado es un valor negativo, y también revisando la documentación oficial tenemos que:

1
2
3
4
SUBSTRING ( expression ,start , length )
...
length
Es un entero positivo o una expresión bigint que especifica cuántos caracteres de expression se van a devolver. Si length es negativo, se genera un error y finaliza la instrucción.

http://msdn.microsoft.com/es-es/library/ms187748.aspx

http://msdn.microsoft.com/es-es/library/ms186323.aspx

Te recomiendo siempre que antes de publicar una nueva pregunta en el foro REVISES LA DOCUMENTACIÓN OFICIAL y también puedes preguntarle a SAN GOOGLE, el generalmente tiene la respuesta.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Se pasó un parámetro de longitud no válido a la función left o substring

Publicado por kanika (19 intervenciones) el 03/06/2014 10:06:21
Muchas gracias a tod@s, efectivamente daba -1 y de ahí el error
PD: Leo, sí que busqué y leí la documentación, pero simplemente hay veces que "no lo ves", gracias por tu recomendación
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Se pasó un parámetro de longitud no válido a la función left o substring

Publicado por OscarVazquez (1 intervención) el 06/09/2016 17:11:06
Kanika, seguí preguntando, si nadie pregunta, nadie contesta y entonces SAN GOOGLE no encuentra nada, ademas a veces la documentación oficial no es clara y es mejor preguntar a los que vivieron una situacion similar. Saludos. -
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar