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),'')
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),'')
Respuestas:
No puede obtener una cadena vacía porque está devolviendo el DATE
tipo 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 NULL
fecha 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
.
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)
VARCHAR
a ay DATE
volver a a VARCHAR
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 fecha YYYY-MM-DD
. Entonces, lanzando mientras date
pierdo el tiempo. Luego, la conversión varchar
permite el uso de la isnull
funció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
.
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
utilizar
seleccione isnull (Convertir (Varchar (500), Fecha, 106), '')
esta funcionando
NULL
fechas es decirSELECT CAST('' AS DATE)
. ¿Qué tipo de datos esDOB
?