Предложение SELECT со столбцом DATETIME в Sybase 15 - PullRequest
0 голосов
/ 07 марта 2011

Я пытаюсь выполнить такой запрос для таблицы со столбцом DATETIME.

SELECT * FROM table WHERE the_date = 
2011-03-06T15:53:34.890-05:00

В качестве строкового ввода из внешнего источника у меня есть следующее:

2011-03-06T15: 53: 34.890-05: 00

Мне нужно выполнить запрос к моей таблице базы данных и извлечь строку, содержащую эту же дату.В моей базе данных он сохраняется как DATETIME и выглядит следующим образом:

2011-03-06 15: 53: 34.89

Я, вероятно, могу немного манипулировать внешним вводом (например, убрать-5 часов ).Но я не могу понять, как сделать простой выбор с помощью столбца datetime.

Я обнаружил функцию преобразования, и стиль 123, кажется, соответствует моим потребностям, но я не могу заставить его работать.Вот ссылка на ссылку о стиле 123

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.blocks/html/blocks/blocks125.htm

1 Ответ

3 голосов
/ 09 марта 2011

Я думаю, что в этой версии документов конвертирование немного неправильно задокументировано.

Поскольку у этого формата всегда есть век, я думаю, вам нужно использовать только 23. Обычно диапазон 100 для преобразования добавляет век к формату года.

Этот формат сводится к секундам, более того.

Если вы хотите больше, вам нужно вместе пройти 2 раза. То есть после части ymd преобразовать (varchar, datetime-column, 14) и сравнить с вашей обрезанной строкой. Сравнение в миллисекундах, вероятно, будет проблемой, в зависимости от того, где вы получили вашу большую строку времени, хотя, поскольку я думаю, что двоичная хранимая форма Sybase имеет гранулярность 300 мс, поэтому, если ваша исходная строка откуда-то еще, она вряд ли будет сравниваться. Другими словами - обрезать миллисекунды и сравнить как строки.

Так может быть:

SELECT * FROM table ГДЕ конвертировать (varchar, the_date, 23) = '2011-03-06T15: 53: 34'

Но преобразование в столбце будет препятствовать использованию индекса, если это проблема.

Если вы сравниваете как datetime, то конвертируется в rhs - но вы должны знать, какие ваши миллисекунды в the_date. Затем можно использовать индекс.

...