Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2008中的Varchar到datetime转换_Sql_Sql Server 2008_Datetime_Type Conversion_Varchar - Fatal编程技术网

SQL Server 2008中的Varchar到datetime转换

SQL Server 2008中的Varchar到datetime转换,sql,sql-server-2008,datetime,type-conversion,varchar,Sql,Sql Server 2008,Datetime,Type Conversion,Varchar,我需要将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 但是当我把日期改成 de

我需要将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' 
它抛出以下错误:

将varchar数据类型转换为datetime数据类型导致值超出范围

datetime的结果格式为YYYY-MM-DD。我希望结果的格式为DD-MM-YYYY

我该怎么办

提前感谢

适合
dd/MM/yyyy
字符串表示的样式是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-正如我在评论中所写的-结果是一个日期数据类型,因此,如果您正在寻找显示格式,则需要一个表示日期值的字符串。

适合
dd/MM/yyyy
字符串表示的样式是103,
   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
而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-正如我在评论中所写的那样-结果是一个日期数据类型,因此,如果您正在寻找显示格式,则需要一个表示日期值的字符串。

只需将变量定义为
2015-01-10
。使用一个标准的日期格式,你的问题就会得到解决。如果你在这里查找代码101,你会看到它应该是m/d/y格式(13不是一个月)。你能退一步解释一下你真正想做什么吗?你为什么关心日期的格式?这取决于您当时使用的任何客户端工具。始终坚持标准YYYY-MM-DD格式。(如果出于某种原因希望以其他格式显示,请尽可能晚地进行转换。)只需将变量定义为
2015-01-10
。使用一个标准的日期格式,你的问题就会得到解决。如果你在这里查找代码101,你会看到它应该是m/d/y格式(13不是一个月)。你能退一步解释一下你真正想做什么吗?你为什么关心日期的格式?这取决于您当时使用的任何客户端工具。始终坚持标准YYYY-MM-DD格式。(如果出于某种原因希望以其他格式显示,请尽可能晚地进行转换。)
   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