
Esto realmente me ha desconcertado durante unos días y estoy buscando ayuda. Estoy usando SQL Server 2017.
Estoy tratando de manejar cadenas de un campo de formato libre y convertirlas a una fecha en el formato "dd/mm/aaaa" o, si no están en este formato, simplemente mostrar el texto palabra por palabra.
Necesito esto en una VISTA, por lo que no puedo usar SET LANGUAGE. Suena simple usandoconvertiryfechapero no parece funcionar.
Entonces, para el fragmento de código a continuación (recuerde que esto estará en una VISTA), quiero leer el texto y si la cadena se convierte a una fecha (es decir, está en el formato "dd/mm/aaaa", ejecute la conversión a una fecha, ya que la necesito en formato de fecha para que Excel la recoja (a través de Connect SQL Server Database)), y si no se convierte a una fecha, muestre el texto tal como está.
create table dateTest1
( idx int,
dateStringTest varchar(15)
);
insert into dateTest1 (idx, dateStringTest)
values (1, '13/01/2021'), (2, 'no');
select
case when isdate(convert(datetime, dateStringTest, 103)) = 1
then convert(datetime, dateStringTest, 103)
else dateStringTest
end as dtres
from dateTest1
--where idx = 1
-- error: Msg 241, Level 16, State 1, Line 15 Conversion failed when converting date and/or time from character string.
-- this error happens for idx = 2. Idx = 1 works ok
Cualquier ayuda con esto sería muy apreciada ya que me está molestando.
Gracias de antemano pablo
Respuesta1
No estoy seguro de qué tan adecuada sea su base de datos para hacer esto. Las funciones de conversión de datos en SQL Server son un poco "torpes" en comparación con otras.
Sin embargo, desde el punto de vista de su base de datos:
si algo essupuestoser unFecha, Entonces esodebiera seruna cita.
Puede que esté "faltante" (es decir, que pueda anularse) pero no puede ser otra cosa.
Si seeranser cualquier otra cosa, entonces no debe ser tratadocomoaFecha.
Los usuarios no pueden entrar.fechas- Solo elRepresentaciones de personajesde ellos.
Mostrar [números y] fechas de su solicitud requiere formatear en la "salida".
Leer [números y] fechas en su solicitud requiere lo contrario, "desformatear" (y validación, por supuesto) en el "camino de entrada".
Los datos debensiempreser almacenado en elcorrectoTipo de datos: "La herramienta adecuada para el trabajo adecuado".
El análisis de texto libre esprobablementeLo mejor es hacerlo en su aplicación, extrayendo el valor de la fecha, validándolo, "desformateándolo" y luego almacenándolo.