Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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中将“nvarchar”转换为“datetime”时发生转换错误_Sql_Sql Server 2008_Nvarchar_Datetime Conversion - Fatal编程技术网

在sql server中将“nvarchar”转换为“datetime”时发生转换错误

在sql server中将“nvarchar”转换为“datetime”时发生转换错误,sql,sql-server-2008,nvarchar,datetime-conversion,Sql,Sql Server 2008,Nvarchar,Datetime Conversion,我有以下代码: DECLARE @StartDate nvarchar SET @StartDate='22/10/2014' SELECT CAST (@StartDate as datetime) 这给了我一个错误: 从字符串转换日期和/或时间时,转换失败 有人能提出更好的方法/至少没有错误的方法吗。要将表示日期的字符串转换为dd/mm/yyyy格式,您可以使用以下方法: DECLARE @StartDate nvarchar(10) SET @StartDate='22/10/2014'

我有以下代码:

DECLARE @StartDate nvarchar
SET @StartDate='22/10/2014'
SELECT CAST (@StartDate as datetime)
这给了我一个错误:

从字符串转换日期和/或时间时,转换失败


有人能提出更好的方法/至少没有错误的方法吗。

要将表示日期的字符串转换为dd/mm/yyyy格式,您可以使用以下方法:

DECLARE @StartDate nvarchar(10)
SET @StartDate='22/10/2014'     
SELECT CONVERT(datetime, @StartDate, 103)

声明varchar意味着将长度设置为1。

SQL Server支持多种格式-请参阅。大多数格式取决于您的设置-因此,这些设置有时可能有效-有时无效

解决此问题的方法是使用SQL Server支持的稍加调整的ISO-8601日期格式-此格式始终有效-无论您的SQL Server语言和日期格式设置如何

SQL Server支持的有两种风格:

YYYYMMDD仅适用于日期,不适用于时间段;注意:没有破折号!,这很重要!YYYY-MM-DD并非独立于SQL Server中的日期格式设置,并且不会在所有情况下工作! 或:

YYYY-MM-DDTHH:MM:SS表示日期和时间-注意:此格式有破折号,但可以省略,并且在日期时间的日期和时间部分之间有一个固定的T作为分隔符。 这对SQL Server 2000及更新版本有效

如果使用SQL Server 2008或更高版本且日期数据类型仅为DATE-而非DATETIME!,然后,您也可以使用YYYY-MM-DD格式,这也适用于SQL Server中的任何设置

不要问我为什么这个话题如此棘手,有些令人困惑——事实就是这样。但是使用YYYYMMDD格式,您应该可以使用任何版本的SQL Server以及SQL Server中的任何语言和日期格式设置


SQL Server 2008及更新版本的建议是,如果只需要日期部分,则使用DATE;如果同时需要日期和时间,则使用DATETIME2n。如果可能的话,您应该尝试逐步淘汰DATETIME数据类型

现在它给出了一个错误:将nvarchar数据类型转换为DATETIME数据类型导致值超出范围。但在我的例子中,@Hamlet Hakobyan“22/10/2014”来自数据库。我的意思是它是这样保存的列值。我想是否有必要将“2014年10月22日”转换为“20141022”?那就行了,行了,伙计。一件小事,你能帮我从这里找到月份吗?我的意思是用字符串形式,比如'jan'而不是'01'