Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
Привет всем. Столкнулся с такой проблемой - есть табличка, одно из полей которой - DATETIME (YEAR TO SECOND). Нужно сделать туды insert. Есть стока даты в немецком формате dd.mm.yyyy. Вопрос - как это сделать? insert не под каким соусом не хочет фидеть среди значений конструкцию вида TO_DATE('26.12.2003','%d.%m.%Y'). Упорно кричит, что синтакс еррор. Хотя если эту конструкцию загнать в селект, то она замечательно переваривается. Как решить эти грабли? Моё решение уж очень корявое. Делаю темповую таблицу, где вместо поля с датой - строка, затем инсертю туда нужные данные, а затем делаю INSERT INTO XXX SELECT. И уже внутри селекта делаю приобразование. Но это де криво. Что это за инсерт такой получается? Ах, да, сервак - Informix 7.31 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 17:30 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
кажися ему надо передавать датавремя в виде '00:00:00 26.12.2003' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 17:43 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
стрянно. Ведь функция TO_DATE превращает строковое значение во внутренний формат даты информикса (т.е. в кол-во секунд, начиная с даты XXXX). Тама 2 параметра - собственно строка и её формат. Только вот он эта глупая железяка не хочет видеть внутри INSERT эту самую присловутую TO_DATE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 19:14 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. Придется сделать преобразование данных в вышеприведенный вид. А ещё можно примерно вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 19:46 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
собственно так и сделал :( но всё-равно криво. неужели эта редиска совсем не под каким соусом не переваривает приведение дат? это-ж глупость какая-то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2004, 20:23 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
попробуй так create table acc (acc char(20), dateopen date); insert into acc values ('12345678901234567890',today); select extend (dateopen, year to second ) from acc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 12:00 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
Привет Димон. На самом деле приведи в порядок переменные SERVER_LOCALE, DB_LOCALE, CLIENT_LOCALE. Насколько я помню, у вас с этим полнейший бардак. При приведении всего в нужный (актуальный) вид все работает наура. ОСТОРОЖНО!!! При неправильной установке переменный можешь привести часть данных в нечитаемый вид. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 18:53 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
Если на живой базе изменить переменные то вообще не подсоеденишься к ней потом. если данные в бд находятся в неправильной локали, то 1 выгрузиться dbexport'ом 2 drop database 3 установить правильную локаль 4 создать и загрузить базу данных причем данные в дбэкспорте могут быть и несовместимы по локали, и тут придется либо в момент загрузки менять DBDATE DBDEC итд. А если и это не поможет, то перекодировать данныэ дбэкспорта и загружать. Ибо никакой двоичный способ бэкапа не поможет если БД создана с неправильной локалью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2004, 19:10 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
cprпопробуй так create table acc (acc char(20), dateopen date); insert into acc values ('12345678901234567890',today); select extend (dateopen, year to second ) from acc со вставкой today никаких проблем нет. CURRENT тоже всё нормально. проблемы именно с тем, что бы заинсертить строчку - вида TO_DATE('26.09.04','%Y.%m.%d'). на TO_DATE - иллегал чарактер :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2004, 17:21 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
IDS 9.21: create temp table tt ( f1 date ); insert into TT values ( TO_Date('01.08.2003', '%d.%m.%Y') ); insert into TT select TO_Date('02.08.2003', '%d.%m.%Y') from systables where tabid=1; select * from TT; f1 ---------- 2003-08-01 2003-08-02 2 Row(s) affected Для IDS 7.3 по крайней мере второй вариант должен работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2004, 01:27 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
Послушай, ну если у тебя это уже строка так сформируй ее заранее в том виде в каком надо. Т.е. на вход insert отдай ее уже как "2004-07-19 00:00:00" На чем ты вообще все это пишешь? Ведь не голые SQL запросы у тебя идут. А если есть переменная, так подготовь ее заранее. И для этого вовсе не надо прогонять ее через темповую таблицу с полем date. To Julian - он хочет не в date вставить значение, а в datetime year to second ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2004, 10:12 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
AlevtinTo Julian - он хочет не в date вставить значение, а в datetime year to second Я был невнимателен. Все равно, работает преобразование типов: create temp table tt ( f1 datetime year to second ); и дальше без изменений, включая 2 Row(s) affected (9.2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2004, 22:12 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
Julian Все равно, работает преобразование типов: create temp table tt ( f1 datetime year to second ); и дальше без изменений, включая 2 Row(s) affected (9.2) (9.2) вот в этой маленькой приписке все дело :-) А ему надо под 7.31 А там то и не работает. Я уже пробовал извратиться как только мог, через несколько преобразований вложенных делал, но под 7.31 не работает. Работает, только если делаешь инсерт через селект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2004, 11:19 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
Alevtin (9.2) вот в этой маленькой приписке все дело :-) А ему надо под 7.31 А там то и не работает. Я уже пробовал извратиться как только мог, через несколько преобразований вложенных делал, но под 7.31 не работает. Работает, только если делаешь инсерт через селект. немного пропал - был в отгулах, пьянствовал :D во-во :) в этой пометочке и вся соль. Объясняю, почему хотел возложить преобразования дат на сервак: исходная строка у меня всегда в заданном формате, а вот какой формат на сервере - вопрос. У нас они и под Win и под *nix. Форматы там разные. Что бы не заморачиваться - хотел сервак напрячь - пусть сам разбирает, что ему надо... не тут то было... Итого - решил пойти по самому лёгкому пути, хотя читаемось данных и упала (ессно не в конечном приложении, а в самой таблице). Пихаю в сервак char(17) YYYYMMDDHHmmssttt. тупо - но работает. ну и клиента пришлось переписать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 13:41 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
DNSokol[quot Alevtin] формате, а вот какой формат на сервере - вопрос. У нас они и под Win и под *nix. В каком формате на сервере по барабану, главное чему равна DBDATE на клиенте. DBDATE=DMY4 == dd.mm.yyyy ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 14:01 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
Понятно, но Журавлев Денис прав, сервера здесь ни при чем, просто на тех машинах на которых у тебя будет работать твое ПО пропиши в клиенте (если под виндой) или в переменных среды пользователя (если под unix-сом) DBDATE=DMY4 И тогда у тебя можно будет однозначно интерпретировать дату как dd.mm.yyyy А datetime, так тот вообще вроде как одинаков и под виндовым informix-ом и под unix-овым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 14:58 |
|
||
|
Insert и DATETIME
|
|||
|---|---|---|---|
|
#18+
Кстати, можно прописать переменную прамо в программе. Например, если ты пишешь на СИ то строка putenv("DBDATE=DMY4"); опишет тебе переменную локально для данного коннекта и не надо будет беспокоится о настройках клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2004, 15:06 |
|
||
|
|

start [/forum/topic.php?fid=44&msg=32761774&tid=1609162]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 138ms |

| 0 / 0 |
