这适用于服务器(sql server 2012),julian日期为5位数
select cast (column1 as DATETIME) FROM mytable
如何在sybase中将int转换为日期时间?
哪种方式最好,因为我有一张大桌子,我必须尽量减少在查询中使用服务器的时间。
我在这里看到:http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc32300.1570/html/sqlug/sqlug645.htm
允许从int
转换为varchar
,从varchar
转换为smalldate
。
所以也许是这样的,但我不知道sybase的语法: 声明@convDate varchar(200)
set @convDate = 'SELECT top 100 CONVERT( varchar (200), column1, 104 )as someCol FROM dbo.mytable'
select cast (@convDate as DateTime) as newDate into #myTemp from ?
答案 0 :(得分:1)
假设日期为YYYYMMDD格式。使用以下:
SELECT CONVERT(DATETIME, CONVERT(VARCHAR, col1)) AS someCol FROM dbo.mytable
答案 1 :(得分:0)
表示Excel中日期的内部数字是从1900年1月1日开始的连续整数序列,它是第一个。因此,一个解决方案是使用函数DATEADD将你的整数(减1)加到1900年1月1日。在这个查询中," "和" 1900年1月1日"因为这是Sybase ASE的默认值。
select dateadd(day, column1 - 1, " ") from mytable /* Probably wrong */
但我测试了一天的差异。结果是2015年7月13日,但Excel显示2015年7月12日。
select dateadd(day, 42197 - 1, " ")
恕我直言,Excel是错误的,因为它显示了1900年2月29日的数字60,但是1900(与2000年相反)并不是闰年。 Sybase ASE是正确的;这给了1900年2月28日和1900年3月1日:
select dateadd(day, 59 - 1, " "), dateadd(day, 60 - 1, " ")
假设你必须采用Excel约定,那么只需减去两个而不是一个:
select dateadd(day, column1 - 2, " ") from mytable /* Bizarre but maybe OK */