Mar*_*iff 55 sql t-sql sql-server datetime
我已经获得了一个需要ISO 8601日期格式的规范,任何人都知道转换代码或获取这两个示例的方法:
ISO 8601 Extended Date 2000-01-14T13:42Z
ISO 8601 Basic Date 20090123T105321Z
Run Code Online (Sandbox Code Playgroud)
mar*_*c_s 88
在处理SQL Server中的日期时,ISO-8601格式可能是最好的方法,因为无论您的语言和文化设置如何,它都能正常工作.
为了将数据插入SQL Server表,您根本不需要任何转换代码或任何内容 - 只需将日期指定为文字字符串
INSERT INTO MyTable(DateColumn) VALUES('20090430 12:34:56.790')
Run Code Online (Sandbox Code Playgroud)
你完成了
如果需要在SELECT上将日期列转换为ISO-8601格式,则可以使用转换代码126或127(带有时区信息)来实现ISO格式.
SELECT CONVERT(VARCHAR(33), DateColumn, 126) FROM MyTable
Run Code Online (Sandbox Code Playgroud)
应该给你:
2009-04-30T12:34:56.790
Run Code Online (Sandbox Code Playgroud)
Cyb*_*ist 22
这个
SELECT CONVERT(NVARCHAR(30), GETDATE(), 126)
Run Code Online (Sandbox Code Playgroud)
会产生这个
2009-05-01T14:18:12.430
Run Code Online (Sandbox Code Playgroud)
有关这方面的更多细节可以在MSDN上找到.
Joh*_*n P 12
如果您只需输出ISO8601格式的日期(包括尾随Z),并且您至少在SQL Server 2012上,那么您可以使用FORMAT:
FORMAT
这会给你一些类似的东西:
FORMAT
天哪,不!如果您在SQL Server中存储格式化日期,那么您会要求一个受伤的世界.始终存储您的日期和时间以及SQL Server"日期/时间"数据类型之一(DATETIME,DATE,TIME,DATETIME2,等等).让前端代码解析显示方法,并且只在构建临时表以构建文件时存储格式化日期.如果绝对必须从SQL Server显示ISO日期/时间格式,则只在显示时执行.我不能强调...不要在SQL Server中存储格式化的日期/时间.
{编辑}.原因很多,但最明显的是,即使有一个很好的ISO格式(可以排序),所有未来的日期计算和搜索(例如,搜索给定月份中的所有行)都需要至少一个隐含的转换(需要额外的时间),如果存储的格式化日期不是您当前需要的格式,则需要先将其转换为日期,然后再转换为您想要的格式.
前端代码也是如此.如果存储格式化日期(文本),则需要相同的旋转来显示由Windows或应用程序定义的本地日期格式.
我的建议是始终将日期/时间存储为DATETIME或其他时态数据类型,并仅在显示时格式化日期.