我有这个日期:7/19/2013
我想将其格式化如下:
2013-07-19 00:00:00.000
我试过了:
select convert(varchar(10),'7/19/2013',120)
但它给了我同样的结果!
答案 0 :(得分:13)
你需要告诉SQL Server它是一个日期;否则,它只会看到一个字符串,并忽略样式编号,因为它与字符串无关。正如Steve Kass指出的那样,如果您保护传入的字符串免受不正确的基于区域或语言的翻译(例如d/m/y
- 这可能导致错误,或者更糟糕的是,错误的数据,则代码只是真正可移植的)。我已更新代码以将字符串解释为m/d/y
而不管语言环境如何,但如果您使用的是SQL Server 2012,则还可以在其示例中使用PARSE()
(或TRY_PARSE()
你想基本上忽略无效日期。)
如果您想要附加时间(包括毫秒),则需要允许超过10个字符,以及支持毫秒的样式。
SELECT CONVERT(CHAR(23),CONVERT(DATETIME,'7/19/2013',101),121);
结果:
2013-07-19 00:00:00.000
如果您不关心毫秒,则可以改为使用样式120:
SELECT CONVERT(CHAR(19),CONVERT(DATETIME,'7/19/2013',101),120);
如果你不关心秒,你可以先截断:
SELECT CONVERT(CHAR(16),CONVERT(DATETIME,'7/19/2013',101),120);
答案 1 :(得分:3)
请注意,如果服务器本地化为以DMY作为日期格式的语言,则Aaron的解决方案将失败。这是因为Aaron示例中的内部CONVERT将包含服务器区域设置,这可能不是您所期望的。
要使此防弹(假设字符串的源不会自动重新本地化格式),请使用PARSE转换字符串(需要SQL Server 2012或更高版本)。
SET LANGUAGE English
SELECT CONVERT(CHAR(23),TRY_CONVERT(DATETIME,'7/19/2013'),121);
SELECT CONVERT(CHAR(23),PARSE('7/19/2013' AS DATETIME USING 'en-US'),121);
SET LANGUAGE Français
SELECT CONVERT(CHAR(23),TRY_CONVERT(DATETIME,'7/19/2013'),121);
SELECT CONVERT(CHAR(23),PARSE('7/19/2013' AS DATETIME USING 'en-US'),121);
答案 2 :(得分:-1)
添加到您的查询中,您可以根据需要添加零/字符:)...
SELECT CONVERT(VARCHAR (10),'7/19/2013',120) + ' 00:00:00.000'
结果:
7/19/2013 00:00:00.000