我有这个日期:7/19/2013
我想将其格式化如下:
2013-07-19 00:00:00.000
我试过这个:
select convert(varchar(10),'7/19/2013',120)
但它给了我同样的结果!
我有这个日期:7/19/2013
我想将其格式化如下:
2013-07-19 00:00:00.000
我试过这个:
select convert(varchar(10),'7/19/2013',120)
但它给了我同样的结果!
您需要告诉 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);
请注意,如果服务器本地化为使用 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);
添加到您的查询中,您可以根据需要添加零/字符:)...
SELECT CONVERT(VARCHAR (10),'7/19/2013',120) + ' 00:00:00.000'
结果:
7/19/2013 00:00:00.000