Форум FAQ О команде
Поиск по сайту:
 
Sybase
Sybase ASA  
Sybase ASE  
Sybase IQ  
Sybase PowerDesigner  
Sybase PowerBuilder  

Продукты
Наши продукты  
Продукты партнеров портала  

Сообщества
Alef community  

Меню
Регистрация  
Почта  

Вход

Рассылка
Рассылка 'РСУБД Sybase ASA 9 - мощность, легкость и надежность'
Почтовая рассылка
"Технологии обработки данных компании Sybase"


Статистика
Яндекс цитирования

Rambler's Top100
Находится в каталоге Апорт

Главная -> Статьи
Константы для DATE, SMALLDATE, DATETIME и SMALLDATETIME

Константы для DATE, SMALLDATE, DATETIME и SMALLDATETIME

Как известно, для типов данных DATE, SMALLDATE, DATETIME и SMALLDATETIME в языке Transact SQL не
существует констант специального вида. Для задания констант этих типов данных используются
строковые константы, содержащие значения даты и времени в определенных форматах.

ASE преобразует эти строковые константы в соответствующие типы данных, как только значение
константы потребуется для работы кода.

Преобразование, как и любое другое преобразование типов в ASE, может быть
  • Явным (с использованием функций convert и cast )
  • Неявным (или подразумеваемым)

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

    При использовании неявного преобразования стиль (формат даты) и тип данных не указываются.

    В этом случае формат, в котором ASE будет пытаться прочитать дату из строки, зависит от
  • установки set dateformat
  • установки set language
  • длины символьной строки
  • наличия в строке разделителей частей даты ( точка, тире, слеш )
  • наличия в строке словесных обозначений месяцев (Jun, Feb и т.д.)
    и возможно еще чего-то ( подробности здесь).
    Поэтому результат неявного преобразования не вполне очевиден.
    Неявное преобразование из строки в дату/время всегда разрешено, поэтому ASE не будет выдавать
    ошибок или сообщений при выполнении преобразования. Возможны только такие ошибки, когда получающаяся
    дата или время неправильны, например, когда месяц получается больше 12.

    Однако есть достаточно простой выход из ситуации - это использование фиксированных форматов дат.
    При выполнении определенных правил ASE интерпретирует дату по предопределенным форматам, которые
    не зависят ни от каких настроек :
  • если строка содержит 8 символов без разделителей, то она переводится по формату YYYYMMDD
  • если строка содержит 6 символов без разделителей, то она переводится по формату YYMMDD. При этом век "угадывается".
    По понятным причинам первый способ задания даты для нас, живущих в 21 веке, является более предпочтительным.

    Часть строки, которая задает время, отделяется от части, задающей дату, одним или несколькими пробелами
    Она более простая, поскольку здесь меньше вариантов. Формат времени следующий :
    hours[:minutes[:seconds[:milliseconds]] [AM | PM]
    

    Здесь можно порекомендовать только не использовать AM/PM, а задавать всегда часы в диапазоне 0..23.
    Также есть тонкость в задании милисекунд :
  • 00:00:00:1 означает одну милисекунду
  • 00:00:00.1 означает одну десятую секунды, т.е. 100 милисекунд.
    Пишите всегда ':'.



Дата публикации: Wednesday 29 March 2006 13:07:22
Материал прочитан: 11955 раз(а)
[ Назад ]



Продвижение сайтов
Биржа ссылок

Copyright©2005 phpMS. Все права защищены.
hosted on pets-tree