set dateformat dmy
select isdate('31/1/2012')
我想通过在 Windows 控制面板中更改数字、日期和时间的格式,我不必在 sql中设置 DATEFORMAT DMY ?
所以我进行了更改,省略了 set 语句,并且 isdate 仍然失败,我错过了什么?
set dateformat dmy
select isdate('31/1/2012')
我想通过在 Windows 控制面板中更改数字、日期和时间的格式,我不必在 sql中设置 DATEFORMAT DMY ?
所以我进行了更改,省略了 set 语句,并且 isdate 仍然失败,我错过了什么?
试试这个。
SELECT CONVERT(VARCHAR(10),GetDate(),111)
这111
是日期格式。您可以更改它以满足您的要求。
SQL Server 通常在System
用户帐户或NETWORKSERVICE
. 这些在安装时采用区域设置。
因此,要更改 SQL Server 的区域设置,您必须更改 sql server 服务使用的用户帐户的区域设置。
您可以按照本文中说明的步骤进行更改
(我从未对此进行过测试,但理论上它应该可以工作。)
在 SQL Server 2012 中,您可以使用TRY_PARSE
和指定文化(例如en-gb
)。你可以在TRY_PARSE
这里阅读:
http://msdn.microsoft.com/en-us/library/hh213126(v=sql.110).aspx
当然,首先使用明确的日期格式要安全得多,并避免所有的文化废话。您可以让应用程序在看到数据库之前转换用户条目,或者完全避免字符串输入 - 使用日历控件或下拉菜单,您可以指定安全格式YYYYMMDD
,而不必担心区域、语言或日期格式设置 - 永远不会介意相信所有用户都在输入d/m/y
与m/d/y
......
无论服务器设置如何,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))
总是像我预期的那样给我 1 个月。