SQL Server 将Nvarchar数据类型转换为日期时间[已关闭]

huus2vyu  于 2022-12-03  发布在  其他
关注(0)|答案(3)|浏览(357)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

昨天关门了。
Improve this question
我正在SQL服务器上的数据库上练习,其中表中的日期列是Nvarchar(255),因此将日期表示为五位数,例如4054240046等。如何将列中的日期更改为实际日期?
我检查的文章只帮助我更改行,但我不能单独更改所有行,因为这需要时间。

nkcskrwz

nkcskrwz1#

如果日期来自Excel,这是对我的评论展开。
这里有两种方法

示例

Declare @YourTable Table ([SomeCol] nvarchar(255))  Insert Into @YourTable Values 
 ('40542')
,('40043')
 
Select *
      ,AsDate1 = try_convert(datetime,try_convert(float,SomeCol)-2.0)
      ,AsDate2 = dateadd(day,try_convert(int,SomeCol),'1899-12-30')  -- Note Start Date
 From @YourTable

结果

SomeCol AsDate1     AsDate2
40542   2010-12-30  2010-12-30
40043   2009-08-18  2009-08-18
jq6vz3qz

jq6vz3qz2#

你有一个奇怪的数据库。基本上,你想

UPDATE TableName
  SET NewDateColName = ConvertionFunction(OldDateColName)

但是需要更多的信息来说明如何将编码为字符串的5位数字转换为日期。

CAST(OldDateColName as Date)

可能会起作用,或者您可能必须在转换为int之后应用一些算术运算。
对于Excel日期:

UPDATE TableName
  SET NewDateColName = CONVERT(numeric(18,4),OldDateColName,101)
8wtpewkr

8wtpewkr3#

您的“日期”值表明您的日期反映了自1900年1月1日(日历系统上的零点)以来的偏移天数。
例如,您引用的值为:

  • 2010年10月3日星期日
  • 2009年8月23日星期日

在这种情况下,您应该可以说

create view dbo.my_improved_view
as
select t.* ,
       some_date = date_add( day,
                             convert( int  , t.funky_date_column ),
                             convert( date , '1900-01-01'        )
                           )
from dbo.table_with_funky_date_column t

相关问题