在SQL Server中为datetime变量分配日期时间值时,哪种格式最适合用于文化无关的原因以及为什么?
下面的日期是2013年12月1日
DECLARE @myDate DATETIME
SET @myDate = '2013-12-01'
SET @myDate = '20131201'
SET @myDate = '12/01/2013'
SET @myDate = '2013-12-01T00:00:00.000'
SET @myDate = '2013-12-01T00:00:00'
如果@myDate的类型为DATETIME2
,您的回答会有所不同吗?
答案 0 :(得分:16)
根据ISO 8601标准,问题中的以下3种格式有效:
DECLARE @myDate DATETIME
SET @myDate = '20131201'
SET @myDate = '2013-12-01T00:00:00.000'
SET @myDate = '2013-12-01T00:00:00'
使用ISO 8601格式的优势在于它是一种 国际标准。此外,由。指定的日期时间值 使用这种格式是明确的。此外,此格式不受影响 通过SET DATEFORMAT或SET LANGUAGE设置。
答案 1 :(得分:3)
这已经在例如best way to convert and validate a date string
ISO-8601格式仅适用于日期YYYYMMDD,或YYYY-MM-DDTHH:mm:ss for 日期与时间
如果您无法保证ISO格式,则应事先设置适用的DATEFORMAT
修改
Re:你还会将它用于datetime2
是的,实际上这在MSDN中明确说明here.由于100ns的额外精度,ISO 8601格式为YYYY-MM-DDTHH:mm:ss[.nnnnnnn]
答案 2 :(得分:-2)
SET @myDate = '2013-12-01T00:00:00.000'
SET @myDate = '2013-12-01T00:00:00'
SET @myDate = '2013-12-01'
根据ISO 8601
,这些是正确的格式