and*_*ndy 8 sql-server datetime
我有一个遗留应用程序,其中输入是一个日期字符串,即:
2009年6月12日
输入的格式总是一个字符串,并且是一致的,它总是dd/mm/yyyy
目前,遗留应用程序只是在DateTime字段中插入它.显然,如果服务器的Localization Culture设置发生变化,我们就会出现错误.
两个问题:
一:
在这种情况下,最安全的方法是在SQLServer中存储日期?
是否有一种格式,无论日期和月份的顺序如何,都将始终正确解释?
二:
什么设置确切地决定了SQLServer DB的文化,它是OS设置,还是该DB的设置,或者是什么?
干杯
spe*_*593 10
格式YYYY-MM-DD是明确的,这意味着SQL Server不会混淆将字符串值转换为月份和日期DATETIME.(我从未遇到使用四位数年份使用该格式进行隐式转换的问题.)
在SQL Server中存储日期值的"最安全"(也是最方便)的方法是使用DATETIME数据类型.
使用该CONVERT函数在转换DATETIME和字符串时显式指定输入和输出格式.
有关CONVERT 样式参数值的SQL Server 2005文档:
http://msdn.microsoft.com/en-us/library/ms187928(SQL.90).aspx
要将字符串表示形式转换为DATETIME数据类型:
select CONVERT(datetime, '2009-06-03', 20)
Run Code Online (Sandbox Code Playgroud)
第一个参数是要转换的数据类型,第二个参数是要转换的表达式,第三个参数是样式.
(样式 20是ODBC规范格式= 'YYYY-MM-DD HH:MI:SS'(24小时制)
[跟进]
要将DATETIME表达式(例如getdate()转换为VARCHAR 'YYYY-MM-DD'格式:
select CONVERT(varchar(10), getdate(), 20)
Run Code Online (Sandbox Code Playgroud)
请注意,指定varchar(10)只能获得etnire 'YYYY-MM-DD HH:MM:SS'格式的前10个字符.
[/跟进]
至于什么决定了默认格式,那将是研究.我们通过指定格式来避免默认格式引起的问题.