我需要插入格式为dd / mm / yyyy的日期,但不幸的是,此时我的sql从嵌入式插入中抛出以下错误
将varchar数据类型转换为日期时间数据类型会导致超出范围的值。 该声明已被终止。
我认为这是因为数据库正在寻找错误的日期格式。任何人都可以指出我如何让数据库找到dd / mm / yyyy的解决方案。我想避免转换代码中的每个日期,因为同时完成了数千个插入。感谢
答案 0 :(得分:4)
我需要插入格式为dd / mm / yyyy的日期
不要思考有关特定格式的内容。日期和时间本身并不具有格式。确保您的数据库字段是与日期/时间相关的类型,然后使用指定DateTime
或DateTimeOffset
值的参数化SQL。那样你的代码根本不处理字符串。
错误在于讨论来自varchar
的转换这一事实表明您将数据作为字符串提供。你不应该这样做。即使您的输入格式是文本,您也应该尽早将其转换为自然数据类型(例如DateTimeOffset
) - 这样可以更轻松地使用它整个代码库中的数据。
答案 1 :(得分:1)
您可以使用convert并将103指定为样式。
convert(datetime, YourColumn, 103)
或者你可以set the date format。
set dateformat dmy
答案 2 :(得分:1)
您的日期文字应始终采用安全,明确且与语言无关的格式。所以你的嵌入式SQL应该是:
INSERT dbo.table(column) VALUES('YYYYMMDD');
您可以使用ToString()
在C#中以这种方式轻松格式化字符串。
但更好的是,您应该使用参数化语句,传递正确的日期时间参数,而不必担心字符串格式。