SQL - 将 INT 转换为日期(33 是 01-01-1950)

Posted

技术标签:

【中文标题】SQL - 将 INT 转换为日期(33 是 01-01-1950)【英文标题】:SQL - Convert INT to Date (33 is 01-01-1950) 【发布时间】:2020-11-12 02:41:01 【问题描述】:

我有 INT 日期的数据库。我试图找出一种将它们转换为可读日期的方法,但没有运气。开始日期是 33 = '01-01-1950'

我找不到将 INT 转换为日期的公式,但我设法创建了一个帮助我了解日期的 Excel 表,它如下所示:

*所有月份都有 31 天,从“0”日开始

我想知道是否有办法以更简单的方式转换它

提前致谢

【问题讨论】:

嗯,这看起来很痛苦。 DATEFROMPARTSMOD 将是必需的。使用包含 DateSerial 列和 Date 的表可能会更好 - 如果您已经在 excel 中拥有它,并且不习惯在 T-SQL 中进行模运算,您可以考虑从 Excel 导入数据表。 为什么 31-01-1950 在图像的两个 dbdates 中表示? 查看您的excel表,您有2个dbDate代表同一日期,最好将该excel创建为数据库中的表并引用它。之后考虑在你的表中添加一个DATE 列来存储日期而不是整数 94(第 2 个月第 31 天)的日期是什么?一个月最后一天之后的所有天都应该属于最后一天吗? @VenkataramanR 我正在使用 DATE() 函数来获取日期,这就是它决定读取它的方式。我还没有测试系统会将其读取为 31-01-1950 或 01-02-1950,但我必须在每个月初使用 0 作为日期 DD,否则 dbDate 将不匹配系统日期 【参考方案1】:

在 SQL Server 中做起来并不难,只需使用 DATEADD 函数两次 - 一次获取您的基线日期,再次将整数添加到该日期上:

SELECT
    DATEADD(
        DAY,
        dayNumber,
        DATEADD(DAY, -33, '1950-01-01') -- This gets the baseline '0' int to date value
    ) AS intToDate
FROM (
    SELECT 33 AS dayNumber
    UNION SELECT 34 AS dayNumber
) a

输出:

1950-01-01 00:00:00.000
1950-01-02 00:00:00.000

【讨论】:

谢谢,但这对我不起作用。我检查了28866 的日期之一,这将是02-05-2019。使用你的方法我得到2028-12-10 00:00:00.000 2019 年的日期你怎么看?每年有 365 天(闰年除外)。 28866 / 365 = 79。79 + 1950 = 2029。 @Muad96 我怀疑您的 Excel 公式有问题。随意张贴在这里,我会看看 @e-i-pi 我知道从那以后它就没有了,这就是我想要弄清楚的。据我所知,我的 Excel 公式/表格运行良好,我已经针对系统生成的交易进行了几次测试,并且我从我的 Excel 表格中获得了正确的日期。我已经发布了这个 Q,希望这种类型的日期格式是已知的并且可以使用 SQL 函数进行转换,但看起来他们正在使用自己的格式:/ @Muad96 嗯,是的,我什至没有从 Dropbox 下载链接文件。您可以发布您正在使用的 Excel 公式吗?

以上是关于SQL - 将 INT 转换为日期(33 是 01-01-1950)的主要内容,如果未能解决你的问题,请参考以下文章

熊猫:将 dtype 'object' 转换为 int

将 SQL Server 日期时间转换为 Int

sql中如何将datetime日期转换成int日期

sql中如何将datetime日期转换成int日期

大查询 - 将INT转换为日期

PLSQL中SQL语句怎样转换日期型函数为字符型?