Форматирование полей даты и времени в выходных файлах bcp в Sybase ASE (или с помощью Sed)

Я пытаюсь создать базу данных в mysql с файлами bcp, созданными из базы данных Sybase ASE.

  1. Я создаю из Sybase ddl и преобразовываю его в ddl Mysql.
  2. Я генерирую файлы bcp.out с помощью Sybase.
  3. Когда я пытаюсь вставить эти файлы bcp.out в новую базу данных Mysql, у меня возникает проблема с форматом полей даты и времени.

Что у меня есть в файлах bcp.out:

iker1 0 1 6 3 1 0 1 Sep 16 2011 11:20:05:950AM
iker2 1 1 6 3 1 0 1 Jun 15 2012 11:20:05:750AM 
gdf34 0 2 6 3 1 0 1 Feb 05 2014 11:20:05:016AM

Что я ожидаю в файлах bcp.out:

iker1 0 1 6 3 1 0 1 2011-09-16 11:20:05.950
iker2 1 1 6 3 1 0 1 2012-06-15 11:20:05.750
gdf34 0 2 6 3 1 0 1 2014-02-05 11:20:05.016

Есть ли способ форматирования/настройки вывода полей даты в Sybase Central, когда мы делаем файл bcp.out?

Есть ли (простой) способ сделать это (с помощью sed)?


person Iker Aguayo    schedule 12.06.2014    source источник
comment
Чтобы сделать это с помощью bcp, вы должны использовать представление и преобразовать дату и время в нужный формат в представлении. Оттуда вы можете выйти из поля зрения.   -  person Michael Gardner    schedule 12.06.2014
comment
@MichaelGardner, да, 24-часовые часы   -  person Iker Aguayo    schedule 12.06.2014
comment
@MichaelGardner Я сделал такое представление, как --› создать представление ..., CONVERT (DATETIME, change_date, 21) как change_date из имен, и я получаю тот же результат. Я что-то пропустил?   -  person Iker Aguayo    schedule 12.06.2014
comment
Проверьте мой ответ - должно помочь.   -  person Michael Gardner    schedule 12.06.2014


Ответы (2)


Вот один из способов сделать это со стороны базы данных.

создайте представление в своей таблице, определив преобразование даты, которое вы хотите видеть. В этом случае следующий оператор извлечет дату в нужном вам формате.

select convert(char(10),your_date_column,23)+" "+convert(char(8),your_date_column,8)+"."+convert(char(3),datepart(ms,your_date_column))

Так что это можно комбинировать с созданием представления в таблице:

create view my_view (col1, col2, col3, your_date_column) as
select col1, col2, col3, convert(char(10),your_date_column,23)+" "+convert(char(8),your_date_column,8)+"."+convert(char(3),datepart(ms,your_date_column))
from your_table

На этом этапе вы можете использовать bcp для извлечения данных из представления.

bcp MyDB..my_view out my_data.out -Uusername -Ppassword -Sservername -c
person Michael Gardner    schedule 12.06.2014

sed 's/@\([a-zA-Z]\{3\}\) \([^@]*-@@-\)$/@\2\1/
     s/Jan$/01/;s/Feb$/02/;s/Jun$/06/;s/Sep$/09/;s/Dec$/12/
     s/@\([0-9][0-9]\) \([0-9]\{4\}\)\( [^@]*-@@-\)\([0-9][0-9]\)$/@\2-\4-\1\3/
     s/..-@@-/-@@-/' YourFile

объяснение:

  1. выделить месяц в конце
  2. изменить название месяца в индексе
  3. ввести индекс в дату и переформатировать его
  4. удалить AM/PM (sed не силен в математике, поэтому беру самый простой для меня, но по тому же принципу месяца, можно адаптировать час)

завершить месяц, чтобы полностью работать на второй линии.

Я подозреваю, что время также должно быть изменено (здесь только час AM), этот sed не меняет его

person NeronLeVelu    schedule 12.06.2014