首页 > 解决方案 > 在 SQL 中将 DateTime 格式化为 yyyy 和零填充

问题描述

我正在尝试将 DateTime 字段格式化为 yyyyMMdd 格式的字符串。这是提取字段的方式。

BirthYear = CASE WHEN AB.BirthDate 为 NULL THEN 0000 ELSE AB.BirthDate END

字符串生成器看起来像这样

格式(出生年份,'yyyy')

但是,我看到空值输出为 1900。知道如何将空值填充为零吗?

谢谢!

标签: sqldatetimeformat

解决方案


我假设这是来自问题中的一些迹象的 SQL Server,在这种情况下,这会将您的生日变为 yyyyMMdd 或 00000000,具体取决于:

SELECT COALESCE(CONVERT(varchar, ab.birthdate, 112), '00000000')

CONVERT to varchar with pattern 112 将日期转换为 yyyyMMdd 格式。如果传入null,则返回null(格式不接受NULL,这就是我没有使用它的原因)。如果返回 null,coalesce 会将其转换为 00000000

00000000 不是日期;没有 "0th of Nonuary 0000" 所以它不是一个 yyyyMMdd 字符串。小心使用


ps; 你得到 1900 的原因是因为那时 SQLS 被编程为认为 0 是日期/天数的数字表示形式。例如,您可以GetUtcDate() + 1.0获取明天的这个时间,或者GetUtcDate() - 7.0获取今天、上周的这个时间,或者甚至像GetUtcDate() + 1.0/24 + 17.0/24/60现在获取的分数加上 1 小时加上 17 分钟,因此数字和日期之间存在相关性,并且 SQLS 被编程考虑那个数字 0 和 1900-01-01 是等价的。-1 是 1899-12-31 等


推荐阅读