在Sybase ASE(或使用Sed)中的bcp输出文件中格式化日期时间字段

时间:2014-06-12 12:16:42

标签: mysql datetime sed sybase bcp

我正在尝试使用从Sybase ASE数据库创建的bcp文件在mysql中构建数据库。

  1. 我使用Sybase创建了ddl,并将其转换为Mysql ddl。
  2. 我使用Sybase生成bcp.out文件。
  3. 当我尝试在新的Mysql数据库中插入此bcp.out文件时,我遇到了日期时间字段格式的问题。
  4. 我在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中格式化/配置日期字段的输出?

    是否有(简单)方法(使用sed)?

2 个答案:

答案 0 :(得分: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 :(得分:1)

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在数学方面不是很强,所以对我来说最简单,但按照同样的原则,可以适应小时)
  5. 完成月份以完全在第二行工作。

    我怀疑时间也必须改变(只有AM小时在这里),这个没有改变它