我有一张表,中间有个字段F_OutDate是用来存储日期的,但字段类型是字符型由于客户的电脑上很多系统设置的日期格式都不一样,比如有些是YYYY-MM-DD格式,有的是YYYY/MM/DD,YYYY-M-D格式。现在要按月统计,怎么办?我做法是将其他格式都格式化输出为YYYY-MM格式但好像有问题。下面做法逻辑是这样的:在字段中取年份(YYYY),取月份如果单比如3就在前面加0成03YEAR(CAST(dbo.T_ExportOperation.F_OutStoreDt AS Datetime))) '-' + (CASE WHEN LEN(CONVERT(varchar(2),MONTH(CAST(dbo.T_ExportOperation.F_OutStoreDt AS Datetime)), 112)) = 1 THEN '0' + CONVERT(varchar(2),MONTH(CAST(dbo.T_ExportOperation.F_OutStoreDt AS Datetime)), 112) ELSE CONVERT(varchar(2),
MONTH(CAST(dbo.T_ExportOperation.F_OutStoreDt AS Datetime)), 112) END) AS OutStoreMonth呵呵,我估计我走错路了,请提供好的方案~谢谢

解决方案 »

  1.   

    将客户机器时间设置为 "select getdate()",或者赋给变量
    不以客户机器时间件为准 而以服务器为准
      

  2.   


    create table datetest
    (
       datecon varchar(12)
    )insert into datetest select '2001-01-1' 
    union all select '2001-1-01'
    select convert(varchar(7),cast(datecon  as datetime ),120) from datetest
    lz是这个意思吗?
      

  3.   

    --数据先转换成时间格式
    declare @t table(dt varchar(20))
    insert into @t select '1996-6-10'
    insert into @t select '1998/6/8'declare @b table(dt datetime)
    insert into  @b select *  from @t
    select * from @b--然后如下操作
    select * from @b group by datepart(month,bt)
      

  4.   

    declare @t table(dt varchar(20))
    insert into @t select '1996-6-10'
    insert into @t select '1998/6/8'
    select convert(varchar(7),cast(dt as datetime),120) from @t
      

  5.   

    估计没讲清楚,要么我看不懂,请解释一下:
    我的意思是数据库中已经存在用户输入的几十万行数据,字段值都是日期值,但字段类型是字符德。
    现在不是说如何插入数据的问题,这个问题就让他们错,我只能在统计的时候再格式化一下里面的数据,让日期标准成  YYYY-MM  ,并做成一个视图再统计视图请问如何吧数据表里面存在类如 '1996-6-10','1998/6/8'格式化成   
                                  1996-06-10,  1998-06-08 此类的值。
      

  6.   

    create table [date1]
    (
       data varchar(10)
    )insert [date1] select '2002-01-01'
    union all select '2002/01/01'
    union all select '2002-02-01'
    union all select '2002/02/01'create view viewname
    as 
    select convert(varchar(10),cast(data as datetime),120) as data2 from [date1]
      

  7.   

    create table [date1]
    (
       data varchar(10)
    )insert [date1] select '2002-01-01'
    union all select '2002/01/01'
    union all select '2002-02-01'
    union all select '2002/02/01'
    create view viewname(viewcolumn)
    as
    select cast(convert(varchar(10),cast(data as datetime),120) as datetime) from [date1]select * from viewname/*
    2002-01-01 00:00:00.000
    2002-01-01 00:00:00.000
    2002-02-01 00:00:00.000
    2002-02-01 00:00:00.000
    */
      

  8.   

    上面帖子基本都使用
    cast(convert(varchar(10),cast(data as datetime),120) as datetime)我测试了一下,发现有问题啊
    得出
    2002-1-1
    2002-1-1
    2002-2-1
    2002-2-1而我想要的是:
    2002-01-01
    2002-01-01
    2002-02-01
    2002-02-01怎么办?
      

  9.   

    select convert(varchar(10), cast('2006/8/8' as datetime), 120)