2014-06-12 27 views
2

我想在Sybase中使用从Sybase ASE数据库创建的bcp文件构建数据库。在Sybase ASE(或与Sed)的bcp输出文件中格式化datetime字段

  1. 我从Sybase创建ddl并将其转换为Mysql ddl。
  2. 我使用Sybase生成bcp.out文件。
  3. 当我试图将这个bcp.out文件插入到新的Mysql数据库中时,我遇到了datetime字段格式的问题。

我在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 

是否有/格式的任何方式配置的输出我们在执行bcp.out文件时,Sybase Central中的日期字段是什么?

有没有(简单)的方法来做到这一点(与SEED)?

+0

要做到这一点与bcp,你会使用一个视图,并将日期时间转换为您希望在视图中的格式。从那里你可以从视野中出来。 –

+0

@MichaelGardner,是的,24小时制 –

+0

@MichaelGardner我做了一个类似于 - > create view的视图,\t CONVERT(DATETIME,change_date,21)作为change_date从名字中得到了相同的结果。我错过了什么? –

回答

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 
1
sed 's/@\([a-zA-Z]\{3\}\) \([^@]*[email protected]@-\)$/@\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\}\)\([^@]*[email protected]@-\)\([0-9][0-9]\)$/@\2-\4-\1\3/ 
    s/[email protected]@-/[email protected]@-/' YourFile 

解释:

  1. 隔离月份末
  2. 变化指数的月份名称
  3. 日期引进指数和重新格式化
  4. 去除AM/PM( sed数学不强,所以对我来说最简单,但按照同样的原则,可以适应小时)

本月完成二线工作。

我怀疑那个时候必须也发生了变化(仅AM小时在这里),这SED不改变它