set dateformat dmy
select isdate('31/1/2012')
我想在Windows控制面板中进入更改数字,日期和时间的格式,我不必在sql中设置DATEFORMAT DMY ? / p>
所以我做了改动,省略了设置的陈述,而且isdate仍然失败,我错过了什么?
答案 0 :(得分:1)
试试这个。
SELECT CONVERT(VARCHAR(10),GetDate(),111)
此处111
是日期格式。您可以更改它以满足您的要求。
答案 1 :(得分:1)
SQL Server通常在System
用户帐户或NETWORKSERVICE
下运行。这些在安装时采用区域设置。
因此,要更改SQL Server的区域设置,您必须更改sql server服务使用的用户帐户的区域设置。
您可以按照this article
中说明的步骤进行更改(我从未对此进行过测试,但理论上它应该有效。)
答案 2 :(得分:1)
在SQL Server 2012中,您可以使用TRY_PARSE
并指定文化(例如en-gb
)。您可以在此处阅读TRY_PARSE
:
http://msdn.microsoft.com/en-us/library/hh213126(v=sql.110).aspx
当然,更安全的是首先使用明确的日期格式,并避免所有的文化废话。您可以让应用程序在看到数据库之前转换用户条目,或者只是完全避免字符串输入 - 使用日历控件或下拉菜单,您可以指定安全格式,如YYYYMMDD
,而不必担心区域性,语言或dateformat设置 - 不要相信所有用户都在输入d/m/y
与m/d/y
...
答案 3 :(得分:0)
无论服务器设置如何,SQL都会处理数据库中的日期时间。 如果你有一个看起来像日期时间的任何格式的字符串,你想转换它,你可以使用CAST()或CONVERT()来做这个。但你总是必须这样做。
请参阅http://msdn.microsoft.com/en-us/library/ms187928.aspx
一个好的信息也是http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes
在你的情况下
select isdate('31/1/2012')
应该有效。那么当你运行它时会得到什么错误?
编辑: 试过这个:
SELECT DATEPART(m,CAST('1/31/2012' AS datetime))
和
SELECT DATEPART(m,CONVERT(datetime, '31/1/2012', 103))
总是按照我的预期给我一个月。