sql - 在 SQL Server 2005 中设置和重置日期格式

标签 sql sql-server sql-server-2005 tsql datetime

有没有办法查询 SQLServer 2005 当前与 T-SQL 一起使用的当前 DATEFORMAT?

我有一个应用程序,可以读取预生成的 INSERT 语句并针对数据库执行它们。为了使要插入的数据独立于区域性,我存储以不变区域性表示的日期时间值 (月/日/年...) 。数据库服务器可能在不同的区域设置下运行,具体取决于系统区域设置(可能使用日/月/年),因此插入可能会因为无法解析日期时间而崩溃。

我知道 T-SQL 中有“SET LANGUAGE”和“SET DATEFORMAT”语句来设置要使用的区域设置。
我不想使这些更改永久化(它们是永久的吗?),所以我正在寻找一种从数据库读取 DATEFORMAT 的方法,存储它,根据我的喜好更改格式,然后将其重置为存储的值数据已插入。

有什么想法可以在服务器中找到该值吗?

最佳答案

以下语句将使用给定的日期格式(@dateFormat 变量)执行日期解析操作,然后重新启用原始日期格式。

declare @dateFormat nvarchar(3);
set @dateFormat = 'dmy';

declare @originalDateFormat nvarchar(3);
select @originalDateFormat = date_format from sys.dm_exec_sessions where session_id = @@spid;

set dateformat @dateFormat;

--Returns 1.
select isdate('31/12/2010');

set dateformat @originalDateFormat;

请注意,日期格式更改仅适用于当前连接。重新启用原始日期格式只是为了确保在同一连接上执行的后续语句不受此更改的影响。

关于sql - 在 SQL Server 2005 中设置和重置日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/305462/

相关文章:

sql - 从 SQL Server 中的 VARCHAR 中删除非数字字符的最快方法

sql - T-SQL 多重性多对五或更多/许多 (0...* -> 5...*)

sql - 带有Select语句、执行动态SQL并返回值的表

sql - 查找表列的创建日期/时间

sql - ERP 的最佳默认事务隔离级别是多少(如果有)?

sql - 为什么这个 SUM() 函数在 PostgreSQL 中需要这么长时间?

mysql - 如何根据 SQL 中其中一列的最大值返回多行

sql - 检查 Date 是否为 NULL 或与 1/0 进行比较是否更快?

sql - 在 sql server 2005 中加密密码的方法

php - 为什么给 mysqli_query 时换行符消失了?