转换为字符串时更改默认的日期时间格式

时间:2019-02-08 19:03:40

标签: sql-server tsql

当日期时间自动转换为字符串时,它将使用这种不希望的格式:

mon dd yyyy hh:miAM

如何更改此默认设置,使其成为更典型的格式,例如:

yyyy-mm-dd hh:mi:ss.mmm

此外,我不想每次都必须显式使用强制转换/转换:

Convert(char(23),__date__,121)

我想使用CONCAT()而不在日期时间前后包装转换。我通常通过转储局部变量等方式来附加字符串变量,作为存储过程。在CATCH中,我将此字符串写了出来,但是只要将datetime值串联起来,它就会使用不需要的格式。

示例代码:

Declare @Now  datetime=GETDATE()
       ,@Temp varchar(100)

SET @Temp=CONCAT('It is now: ',@now)

PRINT @Temp -----------------------It is now: Feb  8 2019  1:45PM
SELECT @Now -----------------------2019-02-08 13:45:05.247
Print @Now ------------------------Feb  8 2019  1:45PM
Print Convert(char(23),@Now,121)---2019-02-08 13:45:05.247

输出:

It is now: Feb  8 2019  1:45PM

-----------------------
2019-02-08 13:45:05.247

(1 row affected)

Feb  8 2019  1:45PM
2019-02-08 13:45:05.247

1 个答案:

答案 0 :(得分:0)

如果您正在编写新代码,并且可以创建支持所需格式的对象,那么可以在函数中进行操作。

CREATE FUNCTION dbo.fn_NewDate() 
RETURNS varchar(23) 
AS 
BEGIN
    RETURN(CONVERT(VARCHAR(23), GETDATE(), 121));
END
GO

Declare @Now varchar(23) = dbo.fn_NewDate()
       ,@Temp varchar(100);

SET @Temp=CONCAT('It is now: ', @now)
print @Temp;

结果:

It is now: 2019-02-08 12:43:38.980