从日期时间转换为 INT

发布于 2024-10-28 00:32:40 字数 447 浏览 5 评论 0原文

在我的 SSIS 包中,我必须将值从 DateTime 转换为相应的 INTEGER 值。已提供以下示例。

关于如何转换这些有什么想法吗?

DATETIME   INT
---------  ----
1/1/2009   39814
2/1/2009   39845
3/1/2009   39873
4/1/2009   39904
5/1/2009   39934
6/1/2009   39965
7/1/2009   39995
8/1/2009   40026
9/1/2009   40057
10/1/2009  40087
11/1/2009  40118
12/1/2009  40148
1/1/2010   40179
2/1/2010   40210
3/1/2010   40238
4/1/2010   40269
5/1/2010   40299
6/1/2010   40330

In my SSIS package, I have to converting values from DateTime to a corresponding INTEGER value. The following sample has been provided.

Any ideas as to how I can convert these?

DATETIME   INT
---------  ----
1/1/2009   39814
2/1/2009   39845
3/1/2009   39873
4/1/2009   39904
5/1/2009   39934
6/1/2009   39965
7/1/2009   39995
8/1/2009   40026
9/1/2009   40057
10/1/2009  40087
11/1/2009  40118
12/1/2009  40148
1/1/2010   40179
2/1/2010   40210
3/1/2010   40238
4/1/2010   40269
5/1/2010   40299
6/1/2010   40330

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

何止钟意 2024-11-04 00:32:40

编辑:在最新版本的 SQL Server 中,转换为 float/int 不再有效。请改用以下内容:

select datediff(day, '1899-12-30T00:00:00', my_date_field)
from mytable

请注意,字符串日期应采用明确的日期格式,以便它不受服务器区域设置的影响。


在旧版本的 SQL Server 中,您可以通过先转换为浮点数,然后再转换为 int,将 DateTime 转换为 Integer:(

select cast(cast(my_date_field as float) as int)
from mytable

注意:您不能直接转换为 int,因为如果您中午过去了!)

如果您的数据中有偏移,您显然可以从结果中添加或减去该偏移

您可以通过直接向后转换来向另一个方向进行转换:

select cast(my_integer_date as datetime)
from mytable

EDIT: Casting to a float/int no longer works in recent versions of SQL Server. Use the following instead:

select datediff(day, '1899-12-30T00:00:00', my_date_field)
from mytable

Note the string date should be in an unambiguous date format so that it isn't affected by your server's regional settings.


In older versions of SQL Server, you can convert from a DateTime to an Integer by casting to a float, then to an int:

select cast(cast(my_date_field as float) as int)
from mytable

(NB: You can't cast straight to an int, as MSSQL rounds the value up if you're past mid day!)

If there's an offset in your data, you can obviously add or subtract this from the result

You can convert in the other direction, by casting straight back:

select cast(my_integer_date as datetime)
from mytable
朕就是辣么酷 2024-11-04 00:32:40

选择 DATEDIFF(dd, '1899/12/30', mydatefield)

select DATEDIFF(dd, '12/30/1899', mydatefield)

你穿错了嫁妆 2024-11-04 00:32:40

或者,一旦它已经在 SSIS 中,您可以创建一个派生列(作为某些数据流任务的一部分):

(DT_I8)FLOOR((DT_R8)systemDateTime)

但您必须进行测试以进行双重检查。

Or, once it's already in SSIS, you could create a derived column (as part of some data flow task) with:

(DT_I8)FLOOR((DT_R8)systemDateTime)

But you'd have to test to doublecheck.

明媚如初 2024-11-04 00:32:40

如果您想转换为 int 并且知道日期的样式,例如 104 表示 31.12.2024,那么您可以使用 convert(date, my_date, 104) 转换为默认日期格式 2024-12-31,将其设为 char(10),然后将 '-' 替换为 '' so 并将其设为 int

select convert(int, replace(convert(char(10),convert(date, '31.12.2024', 104)), '-',''))

但这可以缩短。转换为 char 本身也可以获得日期样式,请参阅转换后在 SQL Server 中将日期格式化为 105

select convert(char(10),convert(date, '31.12.2024', 104), 112)

输出:

'20241231'

只需要转换为 int

select convert(int, convert(char(10),convert(date, '31.12.2024', 104), 112))

输出是整数 20241231

If you want to convert to an int and if you know the style of the date, like here 104 for 31.12.2024, then you can convert to the default date format 2024-12-31 with convert(date, my_date, 104), make this a char(10), and then replace '-' with '' so and make that an int.

select convert(int, replace(convert(char(10),convert(date, '31.12.2024', 104)), '-',''))

But this can be made shorter. The conversion to char itself can get a date style as well, see format date to 105 in SQL Server after casting:

select convert(char(10),convert(date, '31.12.2024', 104), 112)

Output:

'20241231'

And this only needs to be converted to int:

select convert(int, convert(char(10),convert(date, '31.12.2024', 104), 112))

Output is the integer 20241231.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文