SQL Server Isnull Devuelve 1900-01-01 cuando el campo es nulo


15

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),'')

55
Estás mezclando demasiado los tipos de datos. Básicamente lo que estás haciendo con las NULLfechas es decir SELECT CAST('' AS DATE). ¿Qué tipo de datos es DOB?
Mark Sinkinson

1
es un tipo de datos varchar que estoy convirtiendo a la fecha
Juan Velez

55
Sé que esta es una publicación antigua, pero vale la pena mencionar que parece que está tratando de formatear los datos en SQL en lugar de dejar que la capa de aplicación lo haga por usted. El 99.9% de las veces es mejor dejar que la capa de aplicación realice el formateo.
Erik

Respuestas:


20

No puede obtener una cadena vacía porque está devolviendo el DATEtipo de valor ISNULL.

Por MSDN ,ISNULL

Devuelve el mismo tipo que check_expression. Si se proporciona un NULL literal como check_expression, devuelve el tipo de datos del valor de reemplazo. Si se proporciona un NULL literal como check_expression y no se proporciona un valor de reemplazo, devuelve un int.

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:

SELECT ISNULL( DOB , '')

Que volverá

''

si el valor es NULL.

Una NULLfecha es NULL(sin valor). Una cadena vacía, por otro lado, se evalúa como 0, que en SQL Server es implícitamente un número entero que representa el número de días desde entonces 1900-01-01.


-3

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.

isnull(cast(cast(DOB as date)as varchar),'') as DOB   (SQL SERVER)

2
Lanzar a VARCHARa ay DATEvolver a a VARCHARno tiene ningún sentido. Cuando eliminas esas tonterías, tu respuesta es la misma que la respuesta aceptada con menos exposición.
Erik

Sí, en su escenario no tendría sentido, pero en el escenario para el que lo usé, comencé con una datetimey solo necesitaba una fecha YYYY-MM-DD. Entonces, lanzando mientras datepierdo el tiempo. Luego, la conversión varcharpermite el uso de la isnullfunción. Entonces todavía obtengo una fecha para los registros poblados y elimino los valores nulos. De lo contrario, me estaba poniendo 1900-01-01 00:00:00.000.
Elvis Candelaria

1
No es mi escenario, es el escenario de la pregunta. Creo que es por eso que está recolectando votos negativos. En efecto, estás tratando de responder una pregunta diferente.
Erik

Sí, tiene usted razón. Lo leí mal. Mi culpa.
Elvis Candelaria

-3

Esto convertirá la fecha NULL en espacio. La capa de aplicación (Excel) maneja bien el espacio

ISNULL (CONVERT(varchar(50), w.TRANSACTIONDT, 120), '')  as wTRANSACTIONDT

-3

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


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.