use*_*116 1 sql sql-server configuration date-format
当应用程序尝试使用此查询插入数据时(yyyy/mm/dd):
INSERT INTO Inv_Dueno_Equipo (Cod_Usuario, Fecha_Inicio, Fecha_Termino, Codigo_Equipo)
VALUES (1, '2012/01/26', '2012/01/31', 1);
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
从数据类型varchar到datetime的转换产生的值超出范围.
但是,如果我将查询更改为(yyyy/dd/mm)
INSERT INTO Inv_Dueno_Equipo (Cod_Usuario, Fecha_Inicio, Fecha_Termino, Codigo_Equipo)
VALUES (1, '2012/26/01', '2012/31/01', 1);
Run Code Online (Sandbox Code Playgroud)
插入数据.如何修复此问题,我需要更改yyyy/mm/dd格式才能使用?
谢谢
SQL Server不DateTime以任何字符串格式存储 - 它存储为8字节数值.
各种设置(语言,日期格式)仅影响DateTime在SQL Server Management Studio中向您显示的方式 - 或者在您尝试将字符串转换为a时如何解析它DateTime.
SQL Server支持许多格式 - 请参阅CDN和CONVERT上的MSDN联机丛书.大多数这些格式取决于您拥有的设置 - 因此,这些设置可能会有效 - 有时不会.
解决此问题的方法是使用SQL Server支持的(略微调整的)ISO-8601日期格式 - 此格式始终有效 - 无论您的SQL Server语言和日期格式设置如何.
在ISO-8601格式由SQL Server支持有两种形式:
YYYYMMDD只为日期(没有时间部分); 请注意:没有破折号!,这非常重要!YYYY-MM-DD是不是独立于你的SQL Server的日期格式设置,将不适用于所有情况!要么:
YYYY-MM-DDTHH:MM:SS对于日期和时间 - 请注意:此格式有破折号(但可以省略),并且T在您的日期和时间部分之间固定为分隔符DATETIME.这适用于SQL Server 2000及更高版本.
如果您使用SQL Server 2008或更新版本以及DATE数据类型(仅限DATE- 不 DATETIME!),那么您确实也可以使用该YYYY-MM-DD格式,并且该格式也适用于SQL Server中的任何设置.
不要问我为什么整个主题如此棘手而且有些混乱 - 这就是它的方式.但是使用这种YYYYMMDD格式,您可以适用于任何版本的SQL Server以及SQL Server中的任何语言和日期格式设置.
因此,对于您的具体案例,请尝试使用:
INSERT INTO Inv_Dueno_Equipo (Cod_Usuario,Fecha_Inicio,Fecha_Termino,Codigo_Equipo)
VALUES (1, '20120126', '20120131', 1);
Run Code Online (Sandbox Code Playgroud)
你应该没事的.