【问题标题】:Converting datetime2 to int将 datetime2 转换为 int
【发布时间】:2021-05-26 19:28:07
【问题描述】:

我想将每条记录的 datetime2 列转换为 int。如何在不创建变量的情况下做到这一点?

我的 datetime2 字段示例:

2020-03-03 10:17:26.0000000
2020-03-03 10:37:35.0000000
etc...

【问题讨论】:

  • (1) 你想要什么整数? (2) 你用的是什么数据库?
  • 您能否向我们展示您在问题中提出的这两个日期的预期结果?
  • 你的问题解决了吗?
  • 大家好,抱歉,我正在使用 SSMS,我想要的 int 将是基于最早的时间日期字段按 asc 顺序排列的整数。因此,例如,我的查询中的最早日期 = '2020-03-03 10:37:35.0000000' 我希望 int 具有任何值作为 logn 因为它是最小值,所以它可以是 1 或者它可能是50,只要没有低于该值的int,
  • 我曾尝试使用 SecV 的方法,但我得到重复的 int 值

标签: sql datetime type-conversion integer datetime2


【解决方案1】:

首先,您应该指定您正在使用的 sql 变体。 假设 Microsoft T-SQL,您可以使用内置函数CAST

CAST ( expression AS data_type [ ( length ) ] )

在您的情况下,要将日期转换为整数,您只需执行以下操作:

CAST ( [field to convert] AS int )  

微软参考文档: https://docs.microsoft.com/it-it/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15

编辑:

正如@HoneyBadger 所指出的,不允许直接转换。由于数据没有小数秒,可以先尝试转换为datetime类型,再转换为int(允许):

    CAST (CAST ([field to convert] AS datetime) AS int)  

【讨论】:

  • Explicit conversion from data type datetime2 to int is not allowed.
  • 感谢您的回复,我已经尝试过了,但我会重复 int 值。有没有办法让 int 值唯一并根据我的 datetime2 字段按升序排列?
  • 我的结果行示例:2020-03-03 10:37:35.0000000 43891、2020-03-03 11:03:40.0000000、43891。如您所见,两个不同的时间,但它们两者具有相同的 int 值
  • 没错,因为int部分对应的是天,小数部分对应的是一天的小数部分(小时、分钟、秒...)。如果你想在不同的时间使用不同的值,你可以转换为float,然后你无论如何都可以对该浮点值进行排序
猜你喜欢
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多