Sql 是否用同一列中的匹配值替换空日期值?
我有一个小查询,如下所示:Sql 是否用同一列中的匹配值替换空日期值?,sql,sql-server,Sql,Sql Server,我有一个小查询,如下所示: SELECT CS.ID, CS.Import_Date, CS.Secondary_Date FROM Center_Summary CS ORDER BY CS.Import_Date 返回如下值: SELECT CS.ID, CS.Import_Date, CS.Secondary_Date FROM Center_Summary CS ORDER BY CS.Import_Date 我想用05/01/2019的值替换这些作为01/01/1900拉取的“空
SELECT
CS.ID,
CS.Import_Date,
CS.Secondary_Date
FROM
Center_Summary CS
ORDER BY CS.Import_Date
返回如下值:
SELECT
CS.ID,
CS.Import_Date,
CS.Secondary_Date
FROM
Center_Summary CS
ORDER BY CS.Import_Date
我想用05/01/2019
的值替换这些作为01/01/1900
拉取的“空”值。在这种情况下,这是因为ID
和Import\u Date
匹配,所以Secondary\u Date
也应该匹配。我曾想过使用REPLACE()
(REPLACE(CS.Secondary\u Date,'01/01/1900',?
),但我不确定如何编写逻辑,根据ID
和Import\u Date
,从列Secondary\u Date
中提取匹配值-我应该在这里使用什么函数
它当前的运行方式(我要替换的红色日期):
我的预期结果是:
为什么不将
更新
与WHERE
一起使用呢
UPDATE dbo.YourTable
SET SecondaryDate = ImportDate
WHERE SecondaryDate = '19000101';
“空”值最好用NULL
表示。我建议将它们转换为NULL
:
nullif(secondary_date, '1900-01-01')
如果确实需要另一个值,则可以使用coalesce()
或case
表达式:
coalesce(nullif(secondary_date, '1900-01-01'), '2019-05-01')
然而,我通常不喜欢代码中的这些神奇值。日期
01/01/1900
不是一个“空”值。在我看来,唯一接近于表示空的值是SQL Server中的零长度字符串,或者说“空”。也有人说NULL
意味着空,但我倾向于这样看“未知”(即NULL
的真正定义).Gotcha-那么它确实是一个空值。实际上,我需要将SecondaryDate设置为SecondaryDate列中的另一个值,其中ID和Import_date与另一行匹配-这有意义吗?我认为我们需要更多的示例,@dwirony,而不是图像。没有图片,我不知道如何解释,我的SQL知识太差,无法进行对话e流利-我在上面添加了我的预期结果图片。我不熟悉最佳实践-你认为尝试将这些空值更改为其他值太多了吗?@dwirony…建议将'1900-01-01'
日期存储为null
——如果意思是日期不适用。有在某些情况下,此类日期是合适的。但是,例如,如果是首次购买日期,并且没有购买,则NULL
是合适的。我认为我没有充分解释我的问题-请查看我在上面添加的前/后图片,以显示我的预期结果。