SQL Server 2008 中的 Varchar 到日期时间的转换

Varchar to datetime conversion in SQL Server 2008

我需要将 varchar 转换为 datetime。我试过类似下面的方法

 declare @datevarchar(150)='01/10/15' 
 declare @datenew date

 select 
     @datenew = convert(smalldatetime, CONVERT(nvarchar(10), CAST(@date AS DATETIME), 101)  ,101)

print @datenew

输出为:2015-01-10

但是当我将日期更改为

 declare @date  varchar(150)='13/10/15' 

它抛出以下错误:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

日期时间的结果格式为 YYYY-MM-DD。我想要格式为 DD-MM-YYYY..

的结果

我该怎么办?

提前致谢

符合dd/MM/yyyy字符串表示的convert样式为103, 而 101 样式适合 MM/dd/yyyy.
这一点,以及 01 是有效日期和有效月份,而 13 只是有效日期,这就是您第一次转换成功而最后一次转换失败的原因。

因此,如果您有一个表示日期格式为 dd/MM/yyyy 的字符串,您可以将其转换为这样的日期:

DECLARE @Datestring char(10) = '13/09/2016' -- See note #1

SELECT CONVERT(Date, @DateString, 103) 

结果将是一个代表 2016 年 9 月 13 日的日期值。

备注:
#1 - 没有必要使用 nvarchar(150) 来表示一个固定长度的字符串,它的所有字符都是 ascii 兼容的。这就是为什么我的字符串是 char(10).

#2 - 正如我在评论中所写 - 结果是一个日期数据类型,因此它 如果您正在寻找一种显示格式,那么您需要一个表示日期值的字符串。

   SET DATEFORMAT dmy; --ADD this command
   DECLARE @date as date  = '13/10/15'; --CHANGE the type to date
   declare @datenew date

 select 
        @datenew = convert(smalldatetime, CONVERT(nvarchar(10), CAST(@date AS DATETIME), 101)  ,101)

   print @datenew