我用cast将字符格式的数据转换成日期格式的
为什么21/09/2010转就报错
也就是说sql识别他的过程是m/d/yyyy
有没有其他的转换方式可以识别21/09/2010的谢谢~~~~

解决方案 »

  1.   


    select convert(datetime,'21/09/2010',103) as date/*
    date
    -----------------------
    2010-09-21 00:00:00.000(1 行受影响)
    */
      

  2.   

      select   CONVERT(varchar,   getdate(),   120   )  
      2004-09-12   11:06:08  
       
      select   replace(replace(replace(CONVERT(varchar,   getdate(),   120   ),'-',''),'   ',''),':','')  
      20040912110608  
       
      select   CONVERT(varchar(12)   ,   getdate(),   111   )  
      2004/09/12  
       
      select   CONVERT(varchar(12)   ,   getdate(),   112   )  
      20040912  
       
      select   CONVERT(varchar(12)   ,   getdate(),   102   )  
      2004.09.12  
       
      其它我不常用的日期格式转换方法:  
       
      select   CONVERT(varchar(12)   ,   getdate(),   101   )  
      09/12/2004  
       
      select   CONVERT(varchar(12)   ,   getdate(),   103   )  
      12/09/2004  
       
      select   CONVERT(varchar(12)   ,   getdate(),   104   )  
      12.09.2004  
       
      select   CONVERT(varchar(12)   ,   getdate(),   105   )  
      12-09-2004  
       
      select   CONVERT(varchar(12)   ,   getdate(),   106   )  
      12   09   2004  
       
      select   CONVERT(varchar(12)   ,   getdate(),   107   )  
      09   12,   2004  
       
      select   CONVERT(varchar(12)   ,   getdate(),   108   )  
      11:06:08  
       
      select   CONVERT(varchar(12)   ,   getdate(),   109   )  
      09   12   2004   1  
       
      select   CONVERT(varchar(12)   ,   getdate(),   110   )  
      09-12-2004  
       
      select   CONVERT(varchar(12)   ,   getdate(),   113   )  
      12   09   2004   1  
       
      select   CONVERT(varchar(12)   ,   getdate(),   114   )  
      11:06:08.177   
      

  3.   

    create table tb(dt varchar(10))
    insert into tb values('21/09/2010')
    go--用parsename
    select cast(parsename(replace(dt,'/','.'),1) + parsename(replace(dt,'/','.'),2)+parsename(replace(dt,'/','.'),3) as datetime) From tb
    /*
    ------------------------------------------------------ 
    2010-09-21 00:00:00.000(所影响的行数为 1 行)
    */--直接按位取
    select cast(right(dt,4) + substring(dt,4,2) + left(dt,2) as datetime) from tb
    /*
    ------------------------------------------------------ 
    2010-09-21 00:00:00.000(所影响的行数为 1 行)
    */drop table tb
      

  4.   

    只要告诉 sqlserver 你要处理的日期的 基本格式就ok了。set dateformat dmy该选项为 会话级别的
      

  5.   

    select convert(datetime,'21/09/2010',103) as date,这个在欧美一些地区也用日月年的形式。