【问题标题】:Convert SQL BigInt as 1811011439 to date time format将 SQL BigInt as 1811011439 转换为日期时间格式
【发布时间】:2019-01-14 17:00:56
【问题描述】:

我的日期时间行看起来像这种格式

1811011439
1811011439
1811011439
1811011439
1811011439
1811011439

可以这样读

Y. 18
M. 11
D. 01 

如您所见,在第一行

请指导我如何将其转换为日期可读格式。

【问题讨论】:

  • 这确实看起来像一个非常奇怪的“日期时间”值——它背后的逻辑是什么?
  • 这里的BIGINT 数字代表什么?毫秒?秒?这里的逻辑是什么?还有你是怎么解决的?
  • 正确的做法是更改数据的存储方式 - 如果是日期时间值,则应将其存储为 DateTime2,而不是其他任何值。
  • 哦,太好了 - 2 位数的年份。我们从 Y2K 中学到了什么?

标签: sql sql-server tsql


【解决方案1】:

您希望将日期时间值(存储为 bigint)的字符串表示形式转换为可读格式。在这种情况下,您可以将CAST 字符串/bigint 的日期部分转换为DATE 值:

SELECT CAST(LEFT(CAST(1811011439 AS VARCHAR), 6) AS DATE)
-- 2018-11-01

我建议使用DATETIME 列而不是BIGINT 列来存储这样的值。使用以下SELECT,您可以获得所有DATETIME 值:

SELECT CAST(SUBSTRING(CAST(1811011439 AS VARCHAR), 1, 6) + ' ' + SUBSTRING(CAST(1811011439 AS VARCHAR), 7, 2) + ':' + SUBSTRING(CAST(1811011439 AS VARCHAR), 9, 2) AS DATETIME)
-- 2018-11-01 14:39:00.000

【讨论】:

    【解决方案2】:

    据我了解的请求,您的 VARCHAR 格式的日期为 'YYMMDDHHmm',因此,最简单的方法是:

    DECLARE @TextDate AS NVARCHAR(20) = '1811011439';
    SELECT CAST(SUBSTRING(@TextDate, 1, 6) AS DATE);
    

    或者,如果它在一个表的某个字段中:

    SELECT CAST(SUBSTRING(YourField, 1, 6) AS DATE) FROM YourTable;
    

    【讨论】:

      【解决方案3】:

      我认为您的列不是 BIGINT 数据类型,它是 VARCHAR 并且您想从中拆分日期

      SELECT CAST(LEFT('1811011439', 6) AS DATE)
      

      如果它真的是BIGINT 列,只需将其转换为VARCHAR,将其拆分,然后将CAST 转换为DATE

      SELECT CAST(LEFT(CAST(YourColumn AS VARCHAR), 6) AS DATE)
      SELECT CAST(LEFT(YourColumn, 6) AS DATE) --It works too
      

      不过,正确的答案是使用正确的数据类型,即DATETIME

      【讨论】:

        猜你喜欢
        • 2021-10-26
        • 2019-10-03
        • 1970-01-01
        • 2011-04-08
        • 2021-05-16
        • 1970-01-01
        • 2020-09-07
        • 1970-01-01
        • 2017-07-15
        相关资源
        最近更新 更多