elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  ERROR 242 SQL SERVER
0 Usuarios y 5 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ERROR 242 SQL SERVER  (Leído 193 veces)
Enantiosis

Desconectado Desconectado

Mensajes: 1


Ver Perfil
ERROR 242 SQL SERVER
« en: Hoy a las 04:21 »

Hola, mi consulta no se ejecuta. La sintaxis no presentar algún marco rojo, pero al aplicarlo no bota un error. Según la ia dice que la fecha es el inconveniente. Aparte, note que mi formato fecha, de sistema es de EEUU y no se como cambiarlo para que sea dia, mes y año (las tabla fecha de nacimiento es dia, mes y año). Agradecería su ayuda.

SELECT T.*,
(YEAR(GETDATE()-FECHA_NACIMIENT)-1900) AS EDAD,
CASE
WHEN (YEAR(GETDATE()-FECHA_NACIMIENT)-1900) BETWEEN 18 AND 25 THEN 'Jovenes'
WHEN (YEAR(GETDATE()-FECHA_NACIMIENT)-1900) BETWEEN 26 AND 30 THEN 'Jovenes Adultos'
WHEN (YEAR(GETDATE()-FECHA_NACIMIENT)-1900) BETWEEN 31 AND 40 THEN 'Adultos'
WHEN (YEAR(GETDATE()-FECHA_NACIMIENT)-1900) BETWEEN 41 AND 100 THEN 'Mayores'
ELSE 'Sin Segmento' END SEGMENTOEDAD
INTO ODS.MD_PERSONA
FROM TAB_PERSONA T



En línea

...
el-brujo
ehn
***
Desconectado Desconectado

Mensajes: 21.661


La libertad no se suplica, se conquista


Ver Perfil WWW
Re: ERROR 242 SQL SERVER
« Respuesta #1 en: Hoy a las 12:41 »

# Problema con la Consulta SQL y Formato de Fecha

El problema principal en tu consulta está en el cálculo de la edad y en cómo estás manejando las fechas. Aquí te explico los problemas y la solución:

## Problemas identificados:

1. **Cálculo incorrecto de la edad**: `YEAR(GETDATE()-FECHA_NACIMIENT)-1900` no es la forma correcta de calcular la edad
2. **Formato de fecha**: El formato de fecha en tu sistema (EE.UU.) no debería afectar la consulta si los datos están almacenados correctamente en la base de datos
3. **Operación con fechas**: Estás restando fechas directamente, lo que puede dar resultados inesperados

## Solución recomendada:

```sql
Código
  1. SELECT T.*,
  2.    DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()) -
  3.    CASE
  4.        WHEN DATEADD(YEAR, DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()), FECHA_NACIMIENTO) > GETDATE()
  5.        THEN 1
  6.        ELSE 0
  7.    END AS EDAD,
  8.    CASE
  9.        WHEN DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()) -
  10.             CASE
  11.                 WHEN DATEADD(YEAR, DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()), FECHA_NACIMIENTO) > GETDATE()
  12.                 THEN 1
  13.                 ELSE 0
  14.             END BETWEEN 18 AND 25 THEN 'Jovenes'
  15.        WHEN DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()) -
  16.             CASE
  17.                 WHEN DATEADD(YEAR, DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()), FECHA_NACIMIENTO) > GETDATE()
  18.                 THEN 1
  19.                 ELSE 0
  20.             END BETWEEN 26 AND 30 THEN 'Jovenes Adultos'
  21.        WHEN DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()) -
  22.             CASE
  23.                 WHEN DATEADD(YEAR, DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()), FECHA_NACIMIENTO) > GETDATE()
  24.                 THEN 1
  25.                 ELSE 0
  26.             END BETWEEN 31 AND 40 THEN 'Adultos'
  27.        WHEN DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()) -
  28.             CASE
  29.                 WHEN DATEADD(YEAR, DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()), FECHA_NACIMIENTO) > GETDATE()
  30.                 THEN 1
  31.                 ELSE 0
  32.             END BETWEEN 41 AND 100 THEN 'Mayores'
  33.        ELSE 'Sin Segmento'
  34.    END AS SEGMENTOEDAD
  35. INTO ODS.MD_PERSONA
  36. FROM TAB_PERSONA T
```

## Sobre el formato de fecha:

El formato de fecha de tu sistema operativo (EE.UU. vs. otros) no debería afectar las consultas SQL si:

1. Los datos están almacenados correctamente en la base de datos (como tipo DATE o DATETIME)
2. Estás usando funciones de fecha de SQL Server (como GETDATE(), DATEDIFF, etc.)

Si necesitas cambiar el formato de visualización en tus resultados, puedes usar:

```sql
Código
  1. CONVERT(VARCHAR, FECHA_NACIMIENTO, 103) -- Formato dd/mm/yyyy
```

## Recomendaciones adicionales:

1. Verifica que el campo FECHA_NACIMIENTO esté definido como tipo DATE o DATETIME en tu tabla
2. Prueba primero la consulta sin el INTO para ver los resultados antes de crear la tabla
3. Considera crear una función para calcular la edad si la vas a usar frecuentemente


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Que hacer cuando sale un "Internal Server Error (Error 500)" en el foro
Sugerencias y dudas sobre el Foro
el-brujo 6 6,302 Último mensaje 31 Mayo 2006, 20:07 pm
por el-brujo
Error en un server
Programación Visual Basic
SigmaSystem32 3 1,889 Último mensaje 16 Diciembre 2008, 23:11 pm
por ssccaann43 ©
BeEF (browser explotation framework error "Internal server error"
Hacking
juanpalomo098 0 3,328 Último mensaje 5 Enero 2017, 17:15 pm
por juanpalomo098
Error se SQL Server
.NET (C#, VB.NET, ASP)
jam man 0 3,634 Último mensaje 27 Octubre 2017, 21:13 pm
por jam man
Error con BULK SQL Server
Bases de Datos
Zeroql 2 3,369 Último mensaje 16 Junio 2018, 15:07 pm
por Zeroql
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines