Не получается добавить/обновить поле дата
, причём вчера всё работало
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.149] |
|
|
информация о разделе
![]() | Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Не получается добавить/обновить поле дата
, причём вчера всё работало
|
|
|
|
|
Пытаюсь сделать 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 и больше никаких. |
|
Сообщ.
#2
,
|
|
|
|
Дима, посмотри, встречается ли полe в constraints, relationships и триггерах.
|
|
Сообщ.
#3
,
|
|
|
|
MIF, а где это посмотреть? Как?
Добавлено MIF, всё намного проще - дата в БД должна быть в американском формате : месяц.день.год. Писец тепреь столько менять |
|
Сообщ.
#4
,
|
|
|
|
Дима, ты полностью запрос дай в студию.
|
|
Сообщ.
#5
,
|
|
|
|
Vadikov, чё ж там давать? Просто добавление в таблицу, в поле datetime. Для примера вот таблица:
![]() ![]() CREATE TABLE [dbo].[test] ( [id] [int] IDENTITY (1, 1) NOT NULL , [Date] [datetime] NOT NULL ) ON [PRIMARY] GO А вот запрос к ней: ![]() ![]() 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, тогда всё Ок. Значиться в БД американский формат даты. Есть вариант переключить его на нормальный? |
|
Сообщ.
#6
,
|
|
|
|
А попробуй так:
![]() ![]() INSERT INTO test(Date) VALUES('2007-07-18 11:46:00') Формат datetime YYYY-MM-DD HH:MM:SS |
|
Сообщ.
#7
,
|
|
|
|
Vadikov, добавляется. И после в Enterprise Manager тображается нормально (18.07.2007 11:46:00). Тогда и программа моя достаёт её нормально. Переделывать меньше (только запись в БД корявым американским форматом так как чтение нормально работает), но всё же переделывать
Добавлено Понял я "где собака порылась" ! Это ж из-за региональных настроек у меня на клиентской машине автоматически переворачивается дата в нормальный вид. |
|
Сообщ.
#8
,
|
|
|
|
Дима, Если не хочеться переколбашивать программу надо только переколбасить запросы когда апдейтишь и когда достаешь.
Давай доставать в твой формат: ![]() ![]() SELECT DATE_FORMAT(Date, "%e.%m.%Y %H:%i:%s") FROM base WHERE id = ля-ля Здесь уже будет из кривого формата браться DD.MM.YY HH:MM:SS и на UPDATE придется криво записывать: |
|
Сообщ.
#9
,
|
|
|
|
Vadikov, этот DATE_FORMAT() это MS SQL или с другими СУБД тоже пойдёт?
|
|
Сообщ.
#10
,
|
|
|
|
FrontBase
Microsoft SQL Server MySQL ODBC PostgreSQL Sybase-CT Вроде как везде одинаково пользуется эта функция |
|
Сообщ.
#11
,
|
|
|
|
Vadikov, нужных мне Oracle и Informix как раз в списке нет
|
|
Сообщ.
#12
,
|
|
|
|
Дима, сейчас выясню...
Добавлено Для Oracle так: http://www.techonthenet.com/oracle/functions/to_date.php |
|
Сообщ.
#13
,
|
|
|
|
Vadikov, и вообщем это всё подойдёт если точно знать какие региональные настройки стоят на сервере. А если писать универсально? Как записать дату в поле типа datetime независимо от региональных настроек сервера? Или если я буду писать в формате '2007-07-18 11:46:00' то это прокатит всегда?
|
|
Сообщ.
#14
,
|
|
|
|
Дима, это прокатит всегда так как этот кривой формат по умолчанию в SQL!
|
|
Сообщ.
#15
,
|
|
|
|
Универсальный подход - использование АДО параметров. При таком подходе код не зависит от региональных настроек сервера и клиента.
|