Добрый день.
Есть потребность передать данные из 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?
Спасибо.
> $name_q = $dbh_my->Query("select * FROM rates WHERE date1 > '$MSdate'") or dieЭто что за бред в мускульном запросе?
>> $name_q = $dbh_my->Query("select * FROM rates WHERE date1 > '$MSdate'") or die
> Это что за бред в мускульном запросе?Я предполагаю, что должны вернуться все строки из таблицы rates у которых значение в поле date1 больше значения переменной $MSdate.
а что?
> Добрый день.
> Есть потребность передать данные из 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)
либо сведите текстовые форматы в одно, либо передавайте данные ч/з цифровые значения с учетом коррекции на тему внутреннего представления это типа данных в разных БД.
> в каком внутреннем формате МС БД хранит это?
Всё хранится в datetime
> а какие переменные (в том числе и системные) на принт даты из
> перла оказывают влияние?Если честно, то не имею понятия.
> какой формат даты мускул использует для печати даты и какой внутренний формат
> для хранения этих данных?тоже хранит в datetime. про формат, используемый мусклом для печати не слышал.
> 1)
> лично я нихрена не понял: "передать данные из MySQL в MS SQL",
> но походу поста данные читаются из МС и вставляются в мускул...Insert будет позже (если я разберусь с датой :) )
> 2)
> перл с мускулом уже не работает? зачем принт вмешивать?print просто в целях дебага, с операциями с базами он не связан.
> 3)
> либо сведите текстовые форматы в одно, либо передавайте данные ч/з цифровые значения
> с учетом коррекции на тему внутреннего представления это типа данных в
> разных БД.У меня одинаковый тип в обоих базах, что-то портится по середине.
> Дата храниться понятно в datetime, но принт выдаёт
> MSdate=май 22 2012 04:05perl -e "print localtime"
perl -e "print scalar localtime"
>> Дата храниться понятно в datetime, но принт выдаёт
>> MSdate=май 22 2012 04:05
> perl -e "print localtime"3191618511211690
> perl -e "print scalar localtime"Mon Jun 18 16:19:28 2012
и?
>> 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. Представление 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)
>[оверквотинг удален]
>> Приводи 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 можно точно определить в каком формате (строковом) дата/время вставляется/извлекается при работе с БД. это еще один вопрос для изучения Вам.
>>> 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')