# 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
SELECT T.*,
DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()) -
CASE
WHEN DATEADD(YEAR, DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()), FECHA_NACIMIENTO) > GETDATE()
THEN 1
ELSE 0
END AS EDAD,
CASE
WHEN DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()) -
CASE
WHEN DATEADD(YEAR, DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()), FECHA_NACIMIENTO) > GETDATE()
THEN 1
ELSE 0
END BETWEEN 18 AND 25 THEN 'Jovenes'
WHEN DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()) -
CASE
WHEN DATEADD(YEAR, DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()), FECHA_NACIMIENTO) > GETDATE()
THEN 1
ELSE 0
END BETWEEN 26 AND 30 THEN 'Jovenes Adultos'
WHEN DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()) -
CASE
WHEN DATEADD(YEAR, DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()), FECHA_NACIMIENTO) > GETDATE()
THEN 1
ELSE 0
END BETWEEN 31 AND 40 THEN 'Adultos'
WHEN DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()) -
CASE
WHEN DATEADD(YEAR, DATEDIFF(YEAR, FECHA_NACIMIENTO, GETDATE()), FECHA_NACIMIENTO) > GETDATE()
THEN 1
ELSE 0
END BETWEEN 41 AND 100 THEN 'Mayores'
ELSE 'Sin Segmento'
END AS SEGMENTOEDAD
INTO ODS.MD_PERSONA
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
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