【发布时间】:2016-09-02 16:26:36
【问题描述】:
我正在尝试访问作为“链接服务器”连接到 SQL Server 的旧 Oracle DB 中的一些数据。我有一个 Oracle 表,其中一列是 Date 类型。此列中的值可以为 NULL。
在我正在构建的查询中,如果值为 NULL,我希望仅返回列值的“日期”部分或空字符串。
我目前正在尝试:
CASE
WHEN ACCOUNT.DATE_REVOKED IS NULL
THEN ''
ELSE CONVERT(DATE, ACCOUNT.DATE_REVOKED)
END
这适用于具有实际日期的值。对于 NULL 值,返回“1900/01/01”。如果我不使用CASE 并且只返回
CONVERT(DATE, ACCOUNT.DATE_REVOKED)
至少在 SQL Server Management Studio 中,我会得到日期部分或文本“NULL”。
我错过了什么?
【问题讨论】:
-
如果您的目标日期列是 DATE 类型,那么它将允许有效日期或 NULL 值存储。您不能在 DATE 数据类型列中存储 ''(空白)。如果您希望将 '' 空白存储在其中,则必须将列的数据类型更改为 VARCHAR()。
-
正如@SagarShelke 所说,如果你有一个日期时间,并在其中写入''(空白),最终结果是1900-01-01。 SQL Server 不会在日期时间中存储空白,但如果它可以为空,它将存储 NULL。是的,varchar 会这样做,但是为什么……那只是不好的做法;当您稍后尝试处理数据时,它会让您面临糟糕的数据和糟糕的性能,以及更多令人头疼的问题。
标签: sql-server oracle