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”日开始
我想知道是否有办法以更简单的方式转换它
提前致谢
【问题讨论】:
嗯,这看起来很痛苦。DATEFROMPARTS
和 MOD
将是必需的。使用包含 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)的主要内容,如果未能解决你的问题,请参考以下文章