Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Конвертирование в datetime...  [new]
RussianForce
Member

Откуда:
Сообщений: 207
Здравствуйте!

Подскажите, как правильно сконвертировать текстовое поле в поле типа datetime?

Выражение:
select convert(datetime, '2009-04-10T00:00:00+04:00')

выдает ошибку...
11 июн 09, 10:05    [7288592]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование в datetime...  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Подскажите, как правильно сконвертировать текстовое поле в поле типа
> datetime?
> Выражение:
> select convert(datetime,'2009-04-10T00:00:00+04:00')
> выдает ошибку...

2008-ой поймет такое: select convert(datetimeoffset, '2009-04-10T00:00:00+04:00')
если версия ниже - отрезать сначала "+04:00"

Posted via ActualForum NNTP Server 1.4

11 июн 09, 10:14    [7288650]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование в datetime...  [new]
RussianForce
Member

Откуда:
Сообщений: 207
Значит, нужно только отрезать? Ясно.
Спасибо!
11 июн 09, 10:22    [7288702]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование в datetime...  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
RussianForce
Значит, нужно только отрезать? Ясно.
Спасибо!
А 4 часа разве прибавлять не надо?
11 июн 09, 10:55    [7288951]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование в datetime...  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> А 4 часа разве прибавлять не надо?

отнимать тогда уж :)

Posted via ActualForum NNTP Server 1.4

11 июн 09, 10:58    [7288972]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование в datetime...  [new]
p4olka
Member

Откуда: Samara
Сообщений: 5
Здравствуйте, форумчане! Совсем недавно решила изучать sql, проходила тест и наткнулась на то, что по материалам лекций не совсем поняла, как осуществляется правильное конвертирование типов в sql. Вопрос теста выглядит так:

Дан некоторый фрагмент SQL-кода:
DECLARE @a CHAR(12)
DECLARE @b DATETIME
DECLARE @c INT
SET @a=’12.11.03’
SET @b=’3.04.04’

Укажите правильные операторы для вычисления количества дней между датами:
1)SET @c=CAST(CAST(@a AS DATETIME)-@b AS INT)
2)SET @c=CAST(@a AS DATETIME)-@b
3)SET @c=CAST(@a AS INT) –CAST(@b AS INT)
4)SET @c=CAST((@a-@b) AS INT)

Мои вопросы:
Где взять литературу чтобы подробнее ознакомиться с этим вопросом?
Почему и как так случилось что в sql можно вычитать разные типы, причем результат равен будет совершенно другому типу?
Объясните, пожалуйста, какой ответ правильный и почему.

Заранее спасибо.
25 авг 09, 13:47    [7577039]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование в datetime...  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
p4olka
Где взять литературу чтобы подробнее ознакомиться с этим вопросом?
Лучшая литература - документация - https://www.sql.ru/faq/faq_topic.aspx?fid=13
p4olka
Почему и как так случилось что в sql можно вычитать разные типы, причем результат равен будет совершенно другому типу?
Дополнительно можно глянуть здесь - https://www.sql.ru/faq/faq_topic.aspx?fid=103
25 авг 09, 13:55    [7577086]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование в datetime...  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
p4olka
Объясните, пожалуйста, какой ответ правильный и почему.
Я не вижу правильного ответа среди перечисленных
Потому что дату/время нужно хранить как дату/время а не как строку
А для вычисления количества дней между двумя датами предназначена функция datediff()
25 авг 09, 13:56    [7577089]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование в datetime...  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Мне кажется, нет ни одного верного ответа, ибо неизвестно @@DATEFORMAT.
Как различить год, месяц и день в таком случае?
25 авг 09, 14:01    [7577135]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование в datetime...  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
p4olka
Здравствуйте, форумчане! Совсем недавно решила изучать sql, проходила тест и наткнулась на то, что по материалам лекций не совсем поняла, как осуществляется правильное конвертирование типов в sql. Вопрос теста выглядит так:

Дан некоторый фрагмент SQL-кода:
DECLARE @a CHAR(12)
DECLARE @b DATETIME
DECLARE @c INT
SET @a=’12.11.03’
SET @b=’3.04.04’

Укажите правильные операторы для вычисления количества дней между датами:
1)SET @c=CAST(CAST(@a AS DATETIME)-@b AS INT)
2)SET @c=CAST(@a AS DATETIME)-@b
3)SET @c=CAST(@a AS INT) –CAST(@b AS INT)
4)SET @c=CAST((@a-@b) AS INT)

Мои вопросы:
Где взять литературу чтобы подробнее ознакомиться с этим вопросом?
Почему и как так случилось что в sql можно вычитать разные типы, причем результат равен будет совершенно другому типу?
Объясните, пожалуйста, какой ответ правильный и почему.

Заранее спасибо.

литература в голове.
с точки зрения "правильности" использования функции, то ни один из приведенных способов.
тут куча неявных приведений типа и знания, как хранится дата в самом сервере.
с точки зрения результата выполнения, тоже ни один. потому как разница в днях обычно вычисляется между большей датой и меньшей. а тут везде отрицательные числа получатся, кроме вторго и третьего, которые вылетят с ошибкой.
поэтому учитывая все выше сказанное, то правильный ответ 1 и 4.
25 авг 09, 14:11    [7577199]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование в datetime...  [new]
p4olka
Member

Откуда: Samara
Сообщений: 5
Спасибо, 1 и 4 - правильные ответы. Видимо они, проверяя знания, используют только те две первые лекции, которые считают, что мы изучили, не учитывая остальных тонкостей:)
25 авг 09, 14:23    [7577279]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование в datetime...  [new]
Glory
Member

Откуда:
Сообщений: 104760
p4olka
Спасибо, 1 и 4 - правильные ответы.

Только никогда не используйте эти правильные ответы в реальных программах
25 авг 09, 14:27    [7577310]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование в datetime...  [new]
Нектотам
Guest
p4olka
Спасибо, 1 и 4 - правильные ответы. Видимо они, проверяя знания, используют только те две первые лекции, которые считают, что мы изучили, не учитывая остальных тонкостей:)

нуну:
DECLARE @a CHAR(12)
DECLARE @b DATETIME
DECLARE @c INT
SET @a='12.11.03'
SET @b='3.04.04'

SET @c=CAST(CAST(@a AS DATETIME)-@b AS INT) 
select @c
SET @c=CAST((@a-@b) AS INT)
select @c
У меня выдаёт:
-----------
2534

(1 row(s) affected)


-----------
2534

(1 row(s) affected)

ЗЫ: наверное потому что сначала было выполнено SET DATEFORMAT dym )))))
25 авг 09, 15:12    [7577729]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование в datetime...  [new]
Anddros
Member

Откуда:
Сообщений: 1077
p4olka
...по материалам лекций...

Это вам такое на лекциях дают???

Гнать таких преподавалей надо в шею. За профнепригодность.
25 авг 09, 15:57    [7578062]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить