从全球化日期/时间格式(可能是ISO8601)转换为SQL Server日期时间类型
是否有一种字符串格式来表示SQL能够解析并转换为另一个偏移量的日期时间(例如EST->UTC) 我有一个来自用户的字符串,例如:从全球化日期/时间格式(可能是ISO8601)转换为SQL Server日期时间类型,sql,sql-server-2005,timezone,globalization,Sql,Sql Server 2005,Timezone,Globalization,是否有一种字符串格式来表示SQL能够解析并转换为另一个偏移量的日期时间(例如EST->UTC) 我有一个来自用户的字符串,例如: declare @p1 varchar(50); declare @utcDateTime datetime; set @p1 = "2009-06-26 14:30:00.000Z-4:00"; -- could be ISO8601 -- what do I do here to convert @p1? set @utcDateTime = -- sh
declare @p1 varchar(50);
declare @utcDateTime datetime;
set @p1 = "2009-06-26 14:30:00.000Z-4:00"; -- could be ISO8601
-- what do I do here to convert @p1?
set @utcDateTime = -- should be "2009-06-26 18:30:00.000"
我希望能够将字符串转换为UTC等效值,并将其存储在datetime字段中。以便:
select @ utcDateTime
应产生以下结果:
"2009-06-26 18:30:00.000"
换句话说,给定第一个字符串,我想存储一个值为'2009-06-26 18:30'的datetime
此外,我们必须假设服务器与用户不在同一时区(因此我们不能只检测偏移量datediff(gettime(),getutctime())
我尝试过使用convert(…)和cast(…作为日期时间),但没有成功
在SQL Server 2005中有这样做的方法吗?如果您使用的是datetimes,则有一种方法 在窗口中运行此命令
declare @date varchar(100)
select @date = '2009-06-26 14:30:00.000'
select dateadd(hh,datediff(hh,getdate(),getutcdate()),@date)
输出
2009-06-26 18:30:00.000
最好一直使用getutcdate()并将用户偏移量存储在他的配置文件中
SQLServer2008有了新的数据类型,这使它更容易实现
现在,这里有一个答案,它将与您拥有的数据一起工作(我还添加了1/2小时的代码)
下面解释代码的工作原理:
如果您使用的是datetimes,则为单向 在窗口中运行此命令
declare @date varchar(100)
select @date = '2009-06-26 14:30:00.000'
select dateadd(hh,datediff(hh,getdate(),getutcdate()),@date)
输出
2009-06-26 18:30:00.000
最好一直使用getutcdate()并将用户偏移量存储在他的配置文件中
SQLServer2008有了新的数据类型,这使它更容易实现
现在,这里有一个答案,它将与您拥有的数据一起工作(我还添加了1/2小时的代码)
下面解释代码的工作原理:
好的,这是我的尝试-这很有趣:-) 返回:
2009-06-26 14:30:00.000Z+4:00 2009-06-26 10:30:00.000
2009-06-26 14:30:00.000Z-4:00 2009-06-26 18:30:00.000
2009-06-26 14:30:00.000Z+14:00 2009-06-26 00:30:00.000
2009-06-26 14:30:00.000Z+4:30 2009-06-26 10:00:00.000
2009-06-26 14:30:00.000Z-4:30 2009-06-26 19:00:00.000
2009-06-26 14:30:00.000Z+14:30 2009-06-26 00:00:00.000
好的,这是我的尝试-这很有趣:-) 返回:
2009-06-26 14:30:00.000Z+4:00 2009-06-26 10:30:00.000
2009-06-26 14:30:00.000Z-4:00 2009-06-26 18:30:00.000
2009-06-26 14:30:00.000Z+14:00 2009-06-26 00:30:00.000
2009-06-26 14:30:00.000Z+4:30 2009-06-26 10:00:00.000
2009-06-26 14:30:00.000Z-4:30 2009-06-26 19:00:00.000
2009-06-26 14:30:00.000Z+14:30 2009-06-26 00:00:00.000
将数据存储为datetime有什么问题?给定的字符串无法转换;SQL Server出现以下错误:“从字符串转换日期时间时转换失败。”“可能是ISO”,或者是ISO?最好选择一种格式。我的意思是,我可以告诉用户使用哪种格式-我会选择ISO 8601。将数据存储为日期时间有什么问题?给定的字符串无法转换;SQL Server出现以下错误:“从字符串转换日期时间时转换失败。”“可能是ISO”,或者是ISO?最好选择一种格式。我的意思是,我可以告诉用户使用哪种格式-我会选择ISO8601。太好了!这管用!我希望它不会看起来那么难看,但不管怎样。这也要求字符串具有一定的长度,但无论如何,我正在验证字符串模式。太好了!这管用!我希望它不会看起来那么难看,但不管怎样。这也要求字符串具有一定的长度——但无论如何,我都要在输入的过程中验证字符串模式。