Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
浮点数的SQL日期格式(不带';1';)_Sql_Sql Server - Fatal编程技术网

浮点数的SQL日期格式(不带';1';)

浮点数的SQL日期格式(不带';1';),sql,sql-server,Sql,Sql Server,我得到了一些数据,其中有一个“float”列,其中包含一个日期,前面有一个1。即1171030代表2017年10月30日 我在尝试将其转换为正常日期时陷入困境,当尝试删除出现一个点的日期时(即171030) 非常感谢您的指导 非常感谢真恶心!让我们试试datefromparts(): 或者,这里是另一种方法: select convert(date, right(convert(varchar(255), cast(val as int)), 6)) SQL Server在其所理解的日期格式方

我得到了一些数据,其中有一个“float”列,其中包含一个日期,前面有一个1。即1171030代表2017年10月30日

我在尝试将其转换为正常日期时陷入困境,当尝试删除出现一个点的日期时(即171030)

非常感谢您的指导


非常感谢

真恶心!让我们试试
datefromparts()

或者,这里是另一种方法:

select convert(date, right(convert(varchar(255), cast(val as int)), 6))

SQL Server在其所理解的日期格式方面实际上非常灵活。

真恶心!让我们试试
datefromparts()

或者,这里是另一种方法:

select convert(date, right(convert(varchar(255), cast(val as int)), 6))

SQL Server在其理解的日期格式方面实际上非常灵活。

我假设这可能是由不符合Y2K的方法产生的,比如JavaScript
getYear()
,它只返回当前年份减去1900。我不清楚这些数据是来自平面文件还是已经导入到数据库表中

如果将此值视为字符串:

case length(val)
    when 7 then cast('20' + right(val, 6) as date)
    when 6 then cast('19' + val as date)
end
如果确实有浮点(或int)值:

在这种情况下,您需要通过字符值进行转换,而不是直接进行日期转换。注意从浮点到字符的字符串转换。如果您更喜欢短一点的,那么您可以选择这一款:

cast(str(19000000 + @val, 8) as date);

假设长度为8可能会出现错误,但这可能是发现和防止问题的好方法。

我假设这可能是由不符合Y2K的方法产生的,例如JavaScript
getYear()
,它只返回当前年份减去1900。我不清楚这些数据是来自平面文件还是已经导入到数据库表中

如果将此值视为字符串:

case length(val)
    when 7 then cast('20' + right(val, 6) as date)
    when 6 then cast('19' + val as date)
end
如果确实有浮点(或int)值:

在这种情况下,您需要通过字符值进行转换,而不是直接进行日期转换。注意从浮点到字符的字符串转换。如果您更喜欢短一点的,那么您可以选择这一款:

cast(str(19000000 + @val, 8) as date);


假设长度为8可能会出现错误,但这可能是发现和防止问题的好方法。

日期字段在小于10天/月的情况下是如何显示的?(例如2017年1月1日)这是相对于1900年的。我不明白。相对于1900意味着什么?我想知道2017年1月1日是11711还是1170101。@user01CU812对不起,我不是指你的问题。1171205是2017年12月5日。日期字段在少于10天/月的情况下是如何显示的?(例如2017年1月1日)这是相对于1900年的。我不明白。相对于1900意味着什么?我想知道2017年1月1日是11711还是1170101。@user01CU812对不起,我不是指你的问题。1171205是2017年12月5日。他能给val加上19000000,然后把它定为一个日期吗?是的,我也在想同样的事情,只是我不知道我可以对数据类型做哪些假设。许多人倾向于回避这种“神奇”的方法。我认为在“浮动”栏中加入一个非标准的日期值会把最佳实践抛到脑后他能把19000000加到val上,然后把它放到一个日期吗?是的,我也在想同样的事情,只是我不知道我能对数据类型做出哪些假设。许多人倾向于回避这种“神奇”的方法。我认为在“浮动”栏中加入一个非标准的日期值会把最佳实践抛到脑后谢谢,谢谢你的帮助。不幸的是,当我尝试这两种方法时都会出错。第一个:“从字符串转换日期和/或时间时转换失败。”模运算符中的数据类型float和int不兼容。“第二个”从字符串转换日期和/或时间时转换失败。“仅供参考:第二种选择可能会在两位数的年份截止点出现障碍:@chelsjo。您可以将列描述为浮点。第一个查询中没有字符串操作。我认为您的数据与您描述的不同。谢谢您,感谢您的帮助。不幸的是,当我尝试这两种方法时都会出错。第一个:“从字符串转换日期和/或时间时转换失败。”模运算符中的数据类型float和int不兼容。“第二个”从字符串转换日期和/或时间时转换失败。“仅供参考:第二种选择可能会在两位数的年份截止点出现障碍:@chelsjo。您可以将列描述为浮点。第一个查询中没有字符串操作。我认为你的数据与你所描述的不同。