将int转换为sybase中的datetime

时间:2015-10-07 10:34:05

标签: tsql casting sybase sybase-asa

这适用于服务器(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 ?

2 个答案:

答案 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 */