Отбросить время при вставке в поле формата "smalldateti

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Отбросить время при вставке в поле формата "smalldateti

Сообщение sergey-911 » 22.06.2005 (Ср) 23:55

БД - MSSQL7. В одной из таблиц - поле "smalldatetime". Нужно, чтобы по умолчанию, в него записывалось, к примеру "21.06.2005", а не "21.06.2005 23:43:00" (время - отбросить при вставке по умолчанию).
Раньше, по умолчанию, было значение
[DateIn] [smalldatetime] NOT NULL DEFAULT (CONVERT(VARCHAR(10), getdate(), 104))
При установке на другой сервер с другими региональными настройками - появились ошибки.
Если по умолчанию будет присваиваться, к примеру, 20050621, а не 21.06.2005 - то ошибок не будет с любыми настройками. Как это реализовать - вопрос!
С уважением, Сергей.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 23.06.2005 (Чт) 1:20

Код: Выделить всё
[DateIn] [smalldatetime] NOT NULL DEFAULT (cast(floor(cast(GETDATE() as float)) as smalldatetime))

Точно не помню, ну и скобки сам сосчитай, но принцип такой.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 23.06.2005 (Чт) 9:38

По опыту: Раньше тоже так делал, но теперь -никаких дефолтных полей! всё пишу как есть.

МОж и не пригодится)))
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 23.06.2005 (Чт) 11:05

Ну, тут два разных вопроса, по сути - использование дефолтов и округление даты вниз :). По первому могу сказать, что все зависит от ситуации - когда мне нужно поймать данные о коннекте навроде HOST_ID() или APP_NAME(), то глупо ожидать, что розыскиваемое приложение будет честно о себе рапортовать. А обычно, конечно, дефолты вполне себе излишни, это да.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 23.06.2005 (Чт) 20:43

Доброго времени суток всем. Огромное спасибо. Со скобками все впорядке. Работает!
А на будущее, сократить дату до дня и месяца представляется возможным? Специфика производства в некоторых случаях требует.
С уважением, Сергей.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 24.06.2005 (Пт) 9:59

Ты имеешь в виду, отбросить год? Но тогда это уже не будет тип datetime, знаешь ли. Можно сделать так:
Код: Выделить всё
MonthDay char(4) not null default (
right('0' + cast(Month(GETDATE()) as char(2)), 2)
+ right('0' + cast(Day(GETDATE()) as char(2)), 2)
)
, но во-первых, это будет строка, а во-вторых - имхо, изврат.
Если же тебе все-таки нужен datetime, то просто вычти текущий год, и вся любовь:
Код: Выделить всё
MonthDay datetime not null default (
dateadd(yyyy, - @Year(GETDATE()), GETDATE())
)
Правда, в этом случае у тебя будут все даты в 1899 / 1900 годах - у сиквела там точка начала времен :).

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 24.06.2005 (Пт) 20:50

Всем доброго времени. Спасибо.
Спасибо Вадим огромное. Меня интересовало вот, что:


SELECT
(
RIGHT('0' + cast(Year(GETDATE()) AS char(4)), 4)
+ RIGHT('0' + cast(Month(GETDATE()) AS char(2)), 2)
)


Тему можно считать закрытой.
С уважением, Сергей.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList