将SQL BigInt转换为1811011439到日期时间格式

将SQL BigInt转换为1811011439到日期时间格式,sql,sql-server,tsql,Sql,Sql Server,Tsql,我的Datetime行的格式如下 1811011439 1811011439 1811011439 1811011439 1811011439 1811011439 它可以这样读 Y. 18 M. 11 D. 01 在你看到的第一行 请告诉我如何将其转换为日期可读格式。您想将日期时间值的字符串表示形式(存储为bigint)转换为可读格式。在这种情况下,您可以将字符串/bigint的日期部分转换为日期值: SELECT CAST(LEFT(CAST(1811011439 AS VARCHAR

我的Datetime行的格式如下

1811011439
1811011439
1811011439
1811011439
1811011439
1811011439
它可以这样读

Y. 18
M. 11
D. 01 
在你看到的第一行


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

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

SELECT CAST(LEFT(CAST(1811011439 AS VARCHAR), 6) AS DATE)
-- 2018-11-01
我建议使用
DATETIME
列而不是
BIGINT
列来存储这样的值。通过以下
选择
可以获得所有
日期时间
值:

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

据我所知,您的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;

我认为您的列不是一个
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

,它看起来确实像一个非常奇怪的“DATETIME”值-它背后的逻辑是什么?这里可能重复的
BIGINT
数字代表什么?毫秒?秒?这里的逻辑是什么?还有,你是怎么解决的?正确的做法是改变数据的存储方式-如果是datetime值,则应将其存储为DateTime2,而不是其他任何形式。哦,太棒了-2位数年。我们从Y2K中什么都没有学到吗?