2016-01-15 5 views
2

Как обновить поле, содержащее информацию о дате/времени, которая содержит только часть данных даты? Что-то вроде следующего:Как обновить поле datetime, чтобы содержать только дату или время.

update [EVENTS] 
    SET [EVENT_DATE] = DATEADD(dd, 0, DATEDIFF(dd, 0, [EVENT_DATE]) 
    WHERE EVENT_NUM = '8592' 

Мне также нужно получить эквивалент, чтобы установить его только на компонент времени?

ответ

5

Вы можете укоротить TIMESTAMP к DATE или TIME литьем его:

cast(EVENT_DATE as DATE) 
cast(EVENT_DATE as TIME) 

Это также задокументированы в Interbase 6 Embedded Руководство по SQL , раздел Кастинг из типов данных SQL в datetime datatypes на стр. 188. Данное руководство доступно на веб-сайте Firebird.

Это работает только в диалекте 3. Если вы все еще работаете с базой данных диалекта 1, вам нужно использовать промежуточный оттенок VARCHAR (с локали определенной длиной 10 или 11), как и в Maxims answer сдирать время часть. Это связано с тем, что DATE на диалекте 1 действительно является меткой времени (и не только датой).

2

Вы можете использовать функцию CAST():

update EVENTS 
    set EVENT_DATE = cast(cast(EVENT_DATE as varchar(11)) as date) 
    where EVENT_NUM = '8592' 
+4

Вам не нужно бросать в varchar, бросать метку времени прямо на дату! – ain

+0

Вероятно, это зависит от используемого диалекта и работает на диалекте 3. Я использую базу данных с диалектом 1, и там мне нужно сначала набросить на varchar, потому что если я делаю это к дате, это не удалит время. –

+0

Это потому, что на диалекте 1 (который BTW устарел с 2000 года), 'DATE' является' TIMESTAMP'. Ваш трюк работает, потому что использование 'VARCHAR (11)' будет лишать информацию о времени. –

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