我对MS SQL Server字符串到日期时隐式转换有疑问。
具体来说,我可以确定插入日期时间列的'yyyy-mm-dd hh:mm:ss'(例如'2011-04-28 13:01:45')格式的字符串将会无论服务器上使用何种区域或语言设置,始终会自动转换为日期时间类型?
如果否,是否存在日期时间的独立字符串格式?
它是否依赖于MSSQL服务器版本以及如何使用?
提前谢谢
答案 0 :(得分:6)
没有
如果您使用的是日期时间列(与2008年推出的较新类型相对),则安全格式包括日期和时间组件之间的字母T,例如'2011-04-28T13:01:45'
。
对于模糊日期(日期< = 12),SQL Server可能会混淆日期和月份:
set language british
select MONTH(CONVERT(datetime,'2011-04-05 13:01:45'))
----
5
set language british
select MONTH(CONVERT(datetime,'2011-04-05T13:01:45'))
----
4
但是,更一般地说,您应该找到一种方法来避免首先将日期时间值视为字符串,例如:如果您从其他(非SQL)代码传递此值,则使用数据访问库中可用的任何工具(例如ADO.Net)将值作为日期时间值传递 - 让库处理任何必要的翻译。