El siguiente código devuelve 1900-01-01 cuando el campo DOB es nulo. Quería (y esperaba) que devuelva una cadena vacía ('') pero no lo es. ¿Cómo debo proceder para obtener los resultados deseados?
isnull(convert(date,DOB,1),'')
sql-server
sql-server-2012
datetime
Juan velez
fuente
fuente
NULL
fechas es decirSELECT CAST('' AS DATE)
. ¿Qué tipo de datos esDOB
?Respuestas:
No puede obtener una cadena vacía porque está devolviendo el
DATE
tipo de valorISNULL
.Por MSDN ,
ISNULL
Si está verificando si el valor es o no
NULL
, no hay necesidad de convertirlo en una fecha, a menos que desee devolver un valor de fecha (que no parece).En cambio, use:
Que volverá
si el valor es
NULL
.Una
NULL
fecha esNULL
(sin valor). Una cadena vacía, por otro lado, se evalúa como0
, que en SQL Server es implícitamente un número entero que representa el número de días desde entonces1900-01-01
.fuente
Si desea devolver un valor para DOB cuando se rellena y eliminar el valor nulo cuando no se rellena DOB. Puede probar esto, pero el DOB será un tipo varchar y no un tipo de fecha.
fuente
VARCHAR
a ayDATE
volver a aVARCHAR
no tiene ningún sentido. Cuando eliminas esas tonterías, tu respuesta es la misma que la respuesta aceptada con menos exposición.datetime
y solo necesitaba una fechaYYYY-MM-DD
. Entonces, lanzando mientrasdate
pierdo el tiempo. Luego, la conversiónvarchar
permite el uso de laisnull
función. Entonces todavía obtengo una fecha para los registros poblados y elimino los valores nulos. De lo contrario, me estaba poniendo1900-01-01 00:00:00.000
.Esto convertirá la fecha NULL en espacio. La capa de aplicación (Excel) maneja bien el espacio
fuente
Solo crea una vista
CREATE VIEW test_view
AS
SELECT caso cuando año (DOB) <= 1900 y luego nulo DOB finaliza como DOB, algún texto, id de la prueba;
y luego usarlo en su lugar tabla original: seleccione * de test_view
fuente
utilizar
seleccione isnull (Convertir (Varchar (500), Fecha, 106), '')
esta funcionando
fuente