Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 SQL Datetime错误:将varchar数据类型转换为Datetime数据类型导致值超出范围_Sql Server - Fatal编程技术网

Sql server SQL Datetime错误:将varchar数据类型转换为Datetime数据类型导致值超出范围

Sql server SQL Datetime错误:将varchar数据类型转换为Datetime数据类型导致值超出范围,sql-server,Sql Server,SQL Server数据库中的以下SQL代码引发SQL错误: DECLARE @val [varchar] (20) SET @val = '18/04/2014' SELECT CONVERT(varchar(10),CONVERT(datetime,@val),101) 错误:将varchar数据类型转换为datetime数据类型导致值超出范围 它适用于以下代码: DECLARE @val [varchar] (20) SET @val = '18/04/2014' SE

SQL Server数据库中的以下SQL代码引发SQL错误:

 DECLARE @val [varchar] (20)
 SET @val = '18/04/2014'
 SELECT CONVERT(varchar(10),CONVERT(datetime,@val),101)
错误:将varchar数据类型转换为datetime数据类型导致值超出范围

它适用于以下代码:

  DECLARE @val [varchar] (20)
  SET @val = '18/04/2014'
  SELECT CONVERT(varchar(10),@val,101)
我能理解原因。在代码中,日期val'18/04/2014'
不符合SQL Server在“设置日期格式”命令中设置的预期格式。通用解决方案是什么?我不想强制任何输入验证以任何定义的格式输入日期。哪种可能是最好的解决方案?

数据库应该已经具有统一/正常格式的文本值。比如说ISO8601。让直接使用它的应用程序(或用户)负责提供这样的信息。“我不想强制任何输入验证以任何定义的格式输入日期。”-那么你注定会有错误。如果有人输入“08/09/2014”,他们是指9月8日还是8月9日?不幸的是,您需要在UI中使用某种日历控件,这样日期就不会模棱两可,或者您需要指定格式。工作正常的“下面的代码”只是将varchar转换为varchar,显然这将“正常”工作。如果不是的话,我会很惊讶的。正如@GarethD所说,你需要有一些规则,否则你会很快失去控制。这些规则应该由数据库之外的代码处理,并且在数据库中应该只有DATE或DATETIME列。不要在数据库中将日期存储为varchar“我不想强制任何输入验证以任何定义的格式输入日期。哪种可能是最好的解决方案?”。第一句话排除了最佳解决方案!