The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Perl: как передать datetime из MySQL в MsSQL?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Perl)
Изначальное сообщение [ Отслеживать ]

"Perl: как передать datetime из MySQL в MsSQL?"  +/
Сообщение от Kamisori email(ok) on 17-Июн-12, 12:46 
Добрый день.
Есть потребность передать данные из MySQL в MS SQL.
Пытаюсь написать под фрёй на перле.
Есть проблема с передачей даты.
Читаю из MS SQL:
$MSdate_q = $dbh_ms->prepare("select  max(date1) as date1  FROM rates");
$MSdate_q->execute;
$MSdate=$MSdate_q->fetchrow;

Дата храниться понятно в datetime, но принт выдаёт
MSdate=май 22 2012 04:05

При попытке запроса к MySQL пустой результат.
$name_q = $dbh_my->Query("select * FROM rates WHERE date1 > '$MSdate'") or die $Mysql::db_errstr;

Как привести дату обратно к datetime?

Спасибо.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Perl: как передать datetime из MySQL в MsSQL?"  +/
Сообщение от Гость on 17-Июн-12, 22:25 
> $name_q = $dbh_my->Query("select * FROM rates WHERE date1 > '$MSdate'") or die

Это что за бред в мускульном запросе?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Perl: как передать datetime из MySQL в MsSQL?"  +1 +/
Сообщение от Kamisori email(ok) on 17-Июн-12, 23:09 
>> $name_q = $dbh_my->Query("select * FROM rates WHERE date1 > '$MSdate'") or die
>  Это что за бред в мускульном запросе?

Я предполагаю, что должны вернуться все строки из таблицы rates у которых значение в поле date1 больше значения переменной $MSdate.
а что?

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Perl: как передать datetime из MySQL в MsSQL?"  +/
Сообщение от LSTemp (ok) on 18-Июн-12, 03:31 
> Добрый день.
> Есть потребность передать данные из MySQL в MS SQL.
> Пытаюсь написать под фрёй на перле.
> Есть проблема с передачей даты.
> Читаю из MS SQL:
> $MSdate_q = $dbh_ms->prepare("select  max(date1) as date1  FROM rates");
> $MSdate_q->execute;
> $MSdate=$MSdate_q->fetchrow;
> Дата храниться понятно в datetime,

в каком внутреннем формате МС БД хранит это?

> но принт выдаёт
> MSdate=май 22 2012 04:05

а какие переменные (в том числе и системные) на принт даты из перла оказывают влияние?

> При попытке запроса к MySQL пустой результат.
> $name_q = $dbh_my->Query("select * FROM rates WHERE date1 > '$MSdate'") or die
> $Mysql::db_errstr;

какой формат даты мускул использует для печати даты и какой внутренний формат для хранения этих данных?

> Как привести дату обратно к datetime?
> Спасибо.

пожалуйста.

ответьте для себя на все вопросы выше. это поможет.

1)
лично я нихрена не понял: "передать данные из MySQL в MS SQL", но походу поста данные читаются из МС и вставляются в мускул...

2)
перл с мускулом уже не работает? зачем принт вмешивать?

3)
либо сведите текстовые форматы в одно, либо передавайте данные ч/з цифровые значения с учетом коррекции на тему внутреннего представления это типа данных в разных БД.


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Perl: как передать datetime из MySQL в MsSQL?"  +/
Сообщение от Kamisori email(ok) on 18-Июн-12, 16:18 

> в каком внутреннем формате МС БД хранит это?

Всё хранится в datetime

> а какие переменные (в том числе и системные) на принт даты из
> перла оказывают влияние?

Если честно, то не имею понятия.


> какой формат даты мускул использует для печати даты и какой внутренний формат
> для хранения этих данных?

тоже хранит в datetime. про формат, используемый мусклом для печати не слышал.


> 1)
> лично я нихрена не понял: "передать данные из MySQL в MS SQL",
> но походу поста данные читаются из МС и вставляются в мускул...

Insert будет позже (если я разберусь с датой :) )

> 2)
> перл с мускулом уже не работает? зачем принт вмешивать?

print просто в целях дебага, с операциями с базами он не связан.

> 3)
> либо сведите текстовые форматы в одно, либо передавайте данные ч/з цифровые значения
> с учетом коррекции на тему внутреннего представления это типа данных в
> разных БД.

У меня одинаковый тип в обоих базах, что-то портится по середине.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

4. "Perl: как передать datetime из MySQL в MsSQL?"  +/
Сообщение от Andrey (??) on 18-Июн-12, 04:27 
> Дата храниться понятно в datetime, но принт выдаёт
> MSdate=май 22 2012 04:05

perl -e "print localtime"
perl -e "print scalar localtime"

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Perl: как передать datetime из MySQL в MsSQL?"  +/
Сообщение от Kamisori email(ok) on 18-Июн-12, 16:20 
>> Дата храниться понятно в datetime, но принт выдаёт
>> MSdate=май 22 2012 04:05
> perl -e "print localtime"

3191618511211690
> perl -e "print scalar localtime"

Mon Jun 18 16:19:28 2012

и?

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Perl: как передать datetime из MySQL в MsSQL?"  +/
Сообщение от ACCA (ok) on 18-Июн-12, 20:19 
>> perl -e "print scalar localtime"
> Mon Jun 18 16:19:28 2012
> и?

Это он тебя стебает за то, что ты не понимаешь сути проблемы и оперируешь скалярами даты.

Даже если не учитывать временные зоны, у тебя есть шесть(!) сущностей:

1. Представление datetime на сервере, который держит M$ SQL
2. Представление datetime в конкретной базе M$ SQL
3. Представление datetime на сервере, который держит MySQL
4. Представление datetime в MySQL
5. Представление datetime в DBI
6. Представление datetime в консоли, где ты пускаешь Perl

Каждая из них управляется своей таблицей locale. При этом, если явно не установлена №2, то используется №1. Если не установлена №4, то используется №3. Если не установлена №5, то используется №6.

Приводи timestamp к секундам (UNIX EPOCH) и пользуйся ими:

$MSdate_q = $dbh_ms->prepare("select  DATEDIFF(s, "19700101", max(date1)) as date1  FROM rates");
$MSdate_q->execute;
$MSdate=$MSdate_q->fetchrow;

Обратно приводи с помощью DATEADD(s, unix_timestamp, '19700101')

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Perl: как передать datetime из MySQL в MsSQL?"  +/
Сообщение от Kamisori email(ok) on 18-Июн-12, 21:09 
>[оверквотинг удален]
> 6. Представление datetime в консоли, где ты пускаешь Perl
> Каждая из них управляется своей таблицей locale. При этом, если явно не
> установлена №2, то используется №1. Если не установлена №4, то используется
> №3. Если не установлена №5, то используется №6.
> Приводи timestamp к секундам (UNIX EPOCH) и пользуйся ими:
> $MSdate_q = $dbh_ms->prepare("select  DATEDIFF(s, "19700101", max(date1)) as date1  FROM
> rates");
> $MSdate_q->execute;
> $MSdate=$MSdate_q->fetchrow;
> Обратно приводи с помощью DATEADD(s, unix_timestamp, '19700101')

Спасибо!
Всё починил.
На всякий случий привожу вариант DATEADD для mysql
DATE_ADD('1970-01-01', INTERVAL '$MSdate' SECOND)

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

10. "Perl: как передать datetime из MySQL в MsSQL?"  +/
Сообщение от LSTemp (ok) on 25-Июн-12, 21:33 
>[оверквотинг удален]
>> Приводи timestamp к секундам (UNIX EPOCH) и пользуйся ими:
>> $MSdate_q = $dbh_ms->prepare("select  DATEDIFF(s, "19700101", max(date1)) as date1  FROM
>> rates");
>> $MSdate_q->execute;
>> $MSdate=$MSdate_q->fetchrow;
>> Обратно приводи с помощью DATEADD(s, unix_timestamp, '19700101')
> Спасибо!
> Всё починил.
> На всякий случий привожу вариант DATEADD для mysql
> DATE_ADD('1970-01-01', INTERVAL '$MSdate' SECOND)

на всякий случай замечу, что в настройках mysql можно точно определить в каком формате (строковом) дата/время вставляется/извлекается при работе с БД. это еще один вопрос для изучения Вам.


Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

9. "Perl: как передать datetime из MySQL в MsSQL?"  +/
Сообщение от LSTemp (ok) on 25-Июн-12, 21:28 
>>> perl -e "print scalar localtime"
>> Mon Jun 18 16:19:28 2012
>> и?
> Это он тебя стебает за то, что ты не понимаешь сути проблемы
> и оперируешь скалярами даты.

на самом деле я не стебался, а указывал на те вопросы, которые надо изучить. Вы все несколько подробней пояснили.

конкретное эффективное решение зависит от настроек сервисов и ОС, поэтому привести его в рамках указанных в вопросе данных невозможно. для этого и были даны направления поиска решения задачи.

>[оверквотинг удален]
> 6. Представление datetime в консоли, где ты пускаешь Perl
> Каждая из них управляется своей таблицей locale. При этом, если явно не
> установлена №2, то используется №1. Если не установлена №4, то используется
> №3. Если не установлена №5, то используется №6.
> Приводи timestamp к секундам (UNIX EPOCH) и пользуйся ими:
> $MSdate_q = $dbh_ms->prepare("select  DATEDIFF(s, "19700101", max(date1)) as date1  FROM
> rates");
> $MSdate_q->execute;
> $MSdate=$MSdate_q->fetchrow;
> Обратно приводи с помощью DATEADD(s, unix_timestamp, '19700101')

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру