Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Resta de datos alfanumericos

Estas en el tema de Resta de datos alfanumericos en el foro de SQL Server en Foros del Web. Estimados: Una consulta.. necesito realizar una resta de una columna (HORAS TRABAJADAS), pero esta columna tiene datos alfanumericos, es decir, tiene horas en numerico y ...
  #1 (permalink)  
Antiguo 18/10/2010, 15:28
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 11 meses
Puntos: 0
Resta de datos alfanumericos

Estimados:
Una consulta.. necesito realizar una resta de una columna (HORAS TRABAJADAS), pero esta columna tiene datos alfanumericos, es decir, tiene horas en numerico y tambien tienen en texto (LM, CA, ETC)

Código XML:
Ver original
  1. HORAS TRABAJADAS
  2. LM
  3. 0,348611111
  4. LM
  5. FA
  6. 0,318055556
  7. 0,323611111
  8. TRASL
  9. FA
  10. 0,338888889

realizo la siguiente consulta

Código SQL:
Ver original
  1. SELECT TERMINAL, HORAS_TRAB, FECHA, (HORAS_TRAB-'0,3125') AS Q_HORAS_EXTRAS FROM horas_oc  ----  22271
  2. WHERE horas_extras = 'si' AND TIPO_CONDUCTOR = 'FULL' AND horas_trab <> 'nt'


pero me arroja el siguiente error

Código SQL:
Ver original
  1. Servidor: mensaje 403, nivel 16, estado 1, línea 1
  2. Operador no válido para el tipo de datos. Operador subtract, tipo VARCHAR.

Que puedo hacer para que me reste la cantidad de horas?? o como debo importar ese tipo de datos para que me efectue la operacion que necesito??
  #2 (permalink)  
Antiguo 18/10/2010, 15:42
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Resta de datos alfanumericos

Agrega a tu where lo siguiente:
Código SQL:
Ver original
  1. AND isnumeric(HORAS_TRAB) = 1
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 18/10/2010, 15:51
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Resta de datos alfanumericos

Me da exactamente el mismo error

Servidor: mensaje 403, nivel 16, estado 1, línea 1
Operador no válido para el tipo de datos. Operador subtract, tipo varchar.
  #4 (permalink)  
Antiguo 18/10/2010, 15:57
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Resta de datos alfanumericos

SELECT DISTINCT HORAS_TRAB FROM horas_oc WHERE ISNUMERIC(horas_oc) = 1

Revisa que te da como resultado esta consulta y debes considerar TODAS aquellas que no puedes restar
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 18/10/2010, 16:04
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Resta de datos alfanumericos

Y para restar usa:
Código SQL:
Ver original
  1. CAST(HORAS_TRAB AS NUMERIC(6,4)) - 0.3125
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #6 (permalink)  
Antiguo 19/10/2010, 08:51
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Resta de datos alfanumericos

Una consulta.... tengo este codigo... y no me arroja ningun resultado, debiendo hacerlo.

Código SQL:
Ver original
  1. SELECT DISTINCT HORAS_TRAB, TERMINAL, FECHA, (CAST(HORAS_TRAB AS NUMERIC(6,4)) - 0.3125) AS Q_HORAS_EXTRAS FROM horas_oc  ----  22271
  2. WHERE ISNUMERIC(HORAS_TRAB) = 1 AND horas_extras = 'si' AND TIPO_CONDUCTOR = 'FULL'

En esta situacion no me da ningun error.. que estare haciendo mal???
  #7 (permalink)  
Antiguo 19/10/2010, 09:08
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Resta de datos alfanumericos

Prueba asi:
Código SQL:
Ver original
  1. SELECT DISTINCT HORAS_TRAB, TERMINAL, FECHA,
  2. CASE WHEN ISNUMERIC(HORAS_TRAB) = 0 THEN 0 ELSE CAST(HORAS_TRAB AS NUMERIC(6,4)) - 0.3125 END AS Q_HORAS_EXTRAS
  3. FROM horas_oc
  4. WHERE horas_extras = 'si' AND TIPO_CONDUCTOR = 'FULL'
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #8 (permalink)  
Antiguo 19/10/2010, 09:17
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Resta de datos alfanumericos

Tampoco me genera ningun resultado, pero tampoco me da error
  #9 (permalink)  
Antiguo 19/10/2010, 09:27
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Resta de datos alfanumericos

Entonces revisa tus datos. Que devuelve?
Código SQL:
Ver original
  1. SELECT * FROM horas_oc
  2. WHERE horas_extras = 'si' AND TIPO_CONDUCTOR = 'FULL'
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #10 (permalink)  
Antiguo 19/10/2010, 09:50
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Resta de datos alfanumericos

Esos datos me arroja la consulta....


Código XML:
Ver original
  1. TERMINAL    TIPO_CONDU  ROL RUT NOMBRE  HORAS_TRAB  NORMAL_LT   TIPO_PLANI  FECHA   CAMPO10 TIPO_CONDUCTOR  horas_extras
  2. A.CASANOVA  FULL    1018.0  9743907-9   ACOSTA CAMPOS MARCO 0,348611111 NORMAL  ELECTRONICA 40452.0 NULL    FULL                    Si  
  3. A.CASANOVA  FULL    1050.0  9583399-3   ALEGRIA CARVALLO FRANCO 0,318055556 NORMAL  ELECTRONICA 40452.0 NULL    FULL                    Si  
  4. A.CASANOVA  FULL    1051.0  5327976-7   ALEGRIA IBARRA RAMON    0,323611111 NORMAL  ELECTRONICA 40452.0 NULL    FULL                    Si  
  5. A.CASANOVA  FULL    1111.0  5161181-0   ARAYA HINOJOSA GUILLERMO    0,338888889 NORMAL  ELECTRONICA 40452.0 NULL    FULL                    Si  
  6. A.CASANOVA  FULL    1196.0  14152852-1  BAZAN VERGARA JOSE  0,349305556 NORMAL  ELECTRONICA 40452.0 NULL    FULL                    Si  
  7. A.CASANOVA  FULL    1215.0  6873936-5   BRAVO ARENAS SEGUNDO    0,346527778 NORMAL  ELECTRONICA 40452.0 NULL    FULL                    Si  
  8. A.CASANOVA  FULL    1223.0  8868230-0   BRAVO ROMAN JORGE   0,365972222 NORMAL  ELECTRONICA 40452.0 NULL    FULL                    Si  
  9. A.CASANOVA  FULL    1246.0  8452770-K   BUSTOS ACEVEDO PATRICIO 0,326388889 NORMAL  ELECTRONICA 40452.0 NULL    FULL                    Si  
  10. A.CASANOVA  FULL    1248.0  9155862-9   BUSTOS LOPEZ LEONIDAS   0,352777778 NORMAL  ELECTRONICA 40452.0 NULL    FULL                    Si  
  11. A.CASANOVA  FULL    1294.0  11632146-7  CARBONELL WILLIAM   0,338194444 NORMAL  ELECTRONICA 40452.0 NULL    FULL                    Si



pero me arroja el siguiente error:

Servidor: mensaje 8114, nivel 16, estado 5, línea 1
Error al convertir el tipo de datos nvarchar a numeric.
  #11 (permalink)  
Antiguo 19/10/2010, 10:32
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Resta de datos alfanumericos

Código SQL:
Ver original
  1. SELECT DISTINCT HORAS_TRAB, TERMINAL, FECHA,
  2. CASE WHEN ISNUMERIC(HORAS_TRAB) = 0 THEN 0 ELSE CAST(REPLACE(HORAS_TRAB,',','.') AS NUMERIC(6,4)) - 0.3125 END AS Q_HORAS_EXTRAS
  3. FROM horas_oc
  4. WHERE horas_extras = 'si' AND TIPO_CONDUCTOR = 'FULL'
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #12 (permalink)  
Antiguo 19/10/2010, 12:11
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Resta de datos alfanumericos

Muchas gracias flaviovich
Me ayudaste mucho.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:58.