sql - SQL 无法在列中插入转换后的日期时间
问题描述
我很困惑为什么当它的输出相同时我无法将转换后的日期值插入到我的表列中。
错误:
System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常
附加信息:从字符串转换日期和/或时间时转换失败
成功(硬编码日期时间):
cmd.CommandText = @"INSERT INTO [TestDB].[Cat1].[Table1] (CreatedOn)
VALUES ('2019-08-22 23:59:59.000')";
失败(转换的日期时间):
cmd.CommandText = @"INSERT INTO [TestDB].[Cat1].[Table1] (CreatedOn)
VALUES ('@CreatedOn')";
//value below has the same output as above (2019-08-22 23:59:59.000)
cmd.Parameters.AddWithValue("@CreatedOn", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
//below failed too
cmd.Parameters.AddWithValue("@CreatedOn", DateTime.Now);
列类型:
解决方案
该值'2019-08-22 23:59:59.000'
与数据类型不明确datetime
(它与新的日期和时间数据类型有关)。例如,如果您是英国人,则以下内容将失败:
SET LANGUAGE BRITISH;
SELECT CONVERT(datetime,'2019-08-22 23:59:59.000');
这是因为 SQL Server 以 格式读取日期yyyy-dd-MM
,而一年中没有 22 个月。如前所述,它适用于较新的数据类型,或者如果您是美国人(但您应该编写与语言无关的代码):
SET LANGUAGE BRITISH; --English
SELECT CONVERT(datetime2(3),'2019-08-22 23:59:59.000');
SELECT CONVERT(datetimeoffset(0),'2019-08-22 23:59:59.000');
SET LANGUAGE ENGLISH; --American. Confusing, right? :)
SELECT CONVERT(datetime,'2019-08-22 23:59:59.000');
一种方法是使用不受数据类型或语言影响的明确格式:
SET LANGUAGE BRITISH;
SELECT CONVERT(datetime,'2019-08-22T23:59:59.000');
否则,您可以告诉 SQL Server 值的样式(在本例中121
):
SET LANGUAGE BRITISH;
SELECT CONVERT(datetime,'2019-08-22 23:59:59.000',121);
推荐阅读
- java - 如何从 Firebase 检索子数据?
- javascript - 关于限制的javascript多字段创建问题
- python - 如何使用 jinja 中的列表和静态值中的键创建 dict
- python - 无法在 repl.it 上的 flask_sqlalchemy 中的数据库上创建表
- excel - 机器人框架:列表应该与空值相同的问题:“无”和“”
- angular - angular7 - 输入类型=复选框需要很长时间才能绑定 - 性能问题
- linux - 如何获取 ssh 连接的用户名?
- three.js - Three.js 将一个盒子放在另一个盒子上
- if-statement - 有没有办法在谷歌表格中拥有类似于 else 的功能
- c++ - VS Code:错误未定义对符号的引用