Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / DateTime при INSERT INTO / 9 сообщений из 9, страница 1 из 1
08.07.2002, 21:31:38
    #32035666
Antoniy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime при INSERT INTO
Помогите пожалуйста решить проблему. Мне нужно хранить в поле типа DateTime только дату (время 00:00:00.000).

DECLARE @data_d DATETIME
SET @data_d = getdate() --convert(datetime,convert(char(10),getdate(),101))

UPDATE SPR_DOK SET N_DATE = @data_d WHERE TIP=82

До этого момента всё работает верно, но при выполнении оператора
INSERT INTO NARAD (NOM_NAR, DATA_D)
(SELECT NOM_NAR, @data_d
FROM ROUTE_CARD
Дата вносится с поменявшимеся местами числом и месяцем. Отдельно SELECT возвращает всё правильно. SET DATEFORMAT здесь влияния не имеет. Подскажите, в чём здесь фокус?
...
Рейтинг: 0 / 0
08.07.2002, 22:23:46
    #32035669
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime при INSERT INTO
УЖЪ СКОЛЬКО РАЗЪ ТВЂРДИЛИ МIРУ...

Код: plaintext
SET @data_d = convert(char( 8 ),getdate(), 112 ) 
...
Рейтинг: 0 / 0
08.07.2002, 23:25:12
    #32035670
Robert Djabarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime при INSERT INTO
For time only use Convert(varchar(25), getdate(), 114)
...
Рейтинг: 0 / 0
08.07.2002, 23:58:22
    #32035674
Antoniy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime при INSERT INTO
Я извиняюсь, забыл убрать отладочный кусок. Вот исправленная строка.
SET @data_d = convert(datetime,convert(char(10),getdate(),101))

Конвертация проходит правильно. @data_d получился уже в формате DateTime, апдейт происходит в верном формате. Так почему же при инсёрте происходит "переворот"?!
...
Рейтинг: 0 / 0
09.07.2002, 03:41:07
    #32035680
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime при INSERT INTO
Все очень просто. Когда конвертируешь в varchar - происходит создание строки в формате европейском или американском, или еще в бог знает каком формате. Например в США принято писать даты в формате mm/dd/yyyy, а в Европе - в формате dd/mm/yyyy. Тут начинаются заморочки с COLLATIONS. Месяц может быть перепутан с днем и, соответственно, наоборот. Поэтому правильным путем вычисления даты будет следующий:
Код: plaintext
1.
2.
3.
4.
5.
6.
DECLARE 
     @Date smalldatetime,
     @InputDate smalldatetime

SET @InputDate = getdate()

SET @Date = CONVERT(smalldatetime, FLOOR(CONVERT(@InputDate, float)))


-- Слон
...
Рейтинг: 0 / 0
09.07.2002, 07:14:47
    #32035687
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime при INSERT INTO
Я то же кой-чего забыл.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DECLARE @data_d char( 8 )

SET @data_d = convert(char( 8 ),getdate(), 112 ) 

UPDATE SPR_DOK SET N_DATE = @data_d WHERE TIP= 82  

INSERT INTO NARAD (NOM_NAR, DATA_D) 
(SELECT NOM_NAR, @data_d 
FROM ROUTE_CARD 
...
Рейтинг: 0 / 0
09.07.2002, 11:32:20
    #32035734
Antoniy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime при INSERT INTO
Спасибо! Оба варианта работают.
Одна поправочка к Слону:
SET @Date = CONVERT(smalldatetime, FLOOR(CONVERT(@InputDate, float))) -- перепутаны местами параметры в CONVERT.

Но всё-таки не понятно почему я видел через PRINT, что @data_d сформировался верно, а дальше при вставке данных формат менялся?

Ещё раз всем спасибо!
...
Рейтинг: 0 / 0
09.07.2002, 14:21:42
    #32035796
altmenn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime при INSERT INTO
>Но всё-таки не понятно почему я видел через PRINT, что >@data_d сформировался верно, а дальше при вставке >данных формат менялся?

а в системе как стоит?
...
Рейтинг: 0 / 0
09.07.2002, 15:15:11
    #32035801
Antoniy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime при INSERT INTO
To altmenn:
И на сервере и на моей машине формат даты dd.mm.yyyy
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / DateTime при INSERT INTO / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]