На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> Не получается добавить/обновить поле дата , причём вчера всё работало
    Пытаюсь сделать UPDATE поля с типом datetime и выдаёт:

    SQL State: 22007, SQL Error Code: 242
    The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.


    При чём ещё вчера в это поле нормально добавлялись данные, обновлялись нормально.
    Атрибуты у поля : NOT NULL и больше никаких.
    Сообщение отредактировано: Дима -
      Дима, посмотри, встречается ли полe в constraints, relationships и триггерах.
        MIF, а где это посмотреть? Как? :wacko:

        Добавлено
        MIF, всё намного проще - дата в БД должна быть в американском формате : месяц.день.год. Писец тепреь столько менять >:(
        Сообщение отредактировано: Дима -
          Дима, ты полностью запрос дай в студию.
            Vadikov, чё ж там давать? Просто добавление в таблицу, в поле datetime. Для примера вот таблица:

            ExpandedWrap disabled
              CREATE TABLE [dbo].[test] (
                  [id] [int] IDENTITY (1, 1) NOT NULL ,
                  [Date] [datetime] NOT NULL
              ) ON [PRIMARY]
              GO


            А вот запрос к ней:
            ExpandedWrap disabled
              INSERT INTO test(Date) VALUES('18.07.2007 11:46:00')


            А вот ответ >:( :

            The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.


            Если вставку делаю даты у которой день <=12, тогда всё Ок. Значиться в БД американский формат даты.

            Есть вариант переключить его на нормальный?
              А попробуй так:
              ExpandedWrap disabled
                INSERT INTO test(Date) VALUES('2007-07-18 11:46:00')


              Формат datetime YYYY-MM-DD HH:MM:SS
              Сообщение отредактировано: Vadikov -
                Vadikov, добавляется. И после в Enterprise Manager тображается нормально (18.07.2007 11:46:00). Тогда и программа моя достаёт её нормально. Переделывать меньше (только запись в БД корявым американским форматом так как чтение нормально работает), но всё же переделывать :(

                Добавлено
                Понял я "где собака порылась" ! Это ж из-за региональных настроек у меня на клиентской машине автоматически переворачивается дата в нормальный вид.
                Сообщение отредактировано: Дима -
                  Дима, Если не хочеться переколбашивать программу надо только переколбасить запросы когда апдейтишь и когда достаешь.

                  Давай доставать в твой формат:

                  ExpandedWrap disabled
                    SELECT DATE_FORMAT(Date, "%e.%m.%Y %H:%i:%s") FROM base WHERE id = ля-ля

                  Здесь уже будет из кривого формата браться DD.MM.YY HH:MM:SS

                  и на UPDATE придется криво записывать:
                  Сообщение отредактировано: Vadikov -
                    Vadikov, этот DATE_FORMAT() это MS SQL или с другими СУБД тоже пойдёт?
                      FrontBase
                      Microsoft SQL Server
                      MySQL
                      ODBC
                      PostgreSQL
                      Sybase-CT

                      Вроде как везде одинаково пользуется эта функция
                        Vadikov, нужных мне Oracle и Informix как раз в списке нет :(
                          Дима, сейчас выясню...

                          Добавлено
                          Для Oracle так: http://www.techonthenet.com/oracle/functions/to_date.php
                            Vadikov, и вообщем это всё подойдёт если точно знать какие региональные настройки стоят на сервере. А если писать универсально? Как записать дату в поле типа datetime независимо от региональных настроек сервера? Или если я буду писать в формате '2007-07-18 11:46:00' то это прокатит всегда?
                              Дима, это прокатит всегда так как этот кривой формат по умолчанию в SQL!
                                Универсальный подход - использование АДО параметров. При таком подходе код не зависит от региональных настроек сервера и клиента.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0656 ]   [ 15 queries used ]   [ Generated: 21.11.25, 20:17 GMT ]