2015-10-07 6 views
0

Sybase Это отлично работает на сервере (SQL Server 2012) для юлианской даты 5 цифрновообращенного INT в DateTime в

select cast (column1 as DATETIME) FROM mytable 

Как бросить Int к DateTime в Sybase?

И что было бы лучшим способом, так как у меня есть большой стол, и я должен минимизировать время я буду использовать сервер под запросом.

Я видел здесь: 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 ? 

ответ

1

Предполагая, что дата в формате ГГГГММДД. Использовать ниже:

SELECT CONVERT(DATETIME, CONVERT(VARCHAR, col1)) AS someCol FROM dbo.mytable 
+0

Спасибо, действительно, что работать с междунар вместо VARCHAR , Будет иметь доступ, чтобы проверить его через пару дней. – CM2K

+0

Я предполагал, что 'col1' является' INT', поэтому должно быть хорошо. – Meet

+0

извините за задержку. У меня сегодня был шанс проверить это. Я получил: 'ошибки синтаксиса durring явного преобразования значения VARCHAR«35766»на DATETIME field.' – CM2K

0

Внутренние номера, представляющие даты в Excel, представляют собой непрерывную последовательность целых чисел с 1 января 1900 года, которая является номером один. Следовательно, решение заключается в использовании функции DATEADD просуммировать ваше число (минус один) до 1 января 1900 г. В этом запросе «» такой же, как «1 января 1900 года», как это Sybase ASE по умолчанию.

select dateadd(day, column1 - 1, " ") from mytable /* Probably wrong */ 

Но я проверил и получил разницу в один день. Результатом этого является 13 июля 2015 года, но вместо этого Excel отображает 12 июля 2015 года.

select dateadd(day, 42197 - 1, " ") 

ИМХО, Excel неправильно, так как он показывает 29 февраля 1900 за номером 60, но 1900 (в отличие от 2000 г.) не является високосным. Sybase ASE правильно; это дает 28 Feb 1900 и 1 марта 1900 года:

select dateadd(day, 59 - 1, " "), dateadd(day, 60 - 1, " ") 

Предполагая, что вы должны были принять конвенцию Excel, а затем просто вычитать два вместо одного:

select dateadd(day, column1 - 2, " ") from mytable /* Bizarre but maybe OK */ 

 Смежные вопросы

  • Нет связанных вопросов^_^